ugrás a tartalomhoz

LEFT JOIN minden sort listáz a bal táblából, amihez nincs a jobb oldalon pár

Anonymous · 2006. Nov. 15. (Sze), 12.30
Van a kovetkezo mySQL query:
SELECT * FROM jobseeker LEFT JOIN pr ON (jobseeker.uid = pr.uid)
A jobseeker tablaban van ket sor, a pr tablaban jelenleg nincs semmi, ures.

Nem ertem miert listaz ki a Query minden sort a "jobseeker" tablabol, ha egyik sornak sincs megfeleloje a "pr" tablaban.

Tudna valaki segiteni ?
Kosz !
 
1

esetleg

virág · 2006. Nov. 15. (Sze), 12.39
Szia,

esetleg egy tábla struktúrát lehetne kérni, SQL-es kérdéseknél jó lenne ha megtanulná mindenki, hogy tábla struktúrával segít a kérdésére válaszolni vágyónak, mivel nem kell neki kitalálni, hogy mi a környezet, ahol az SQL futott.

Köszi.
4

ok

Anonymous · 2006. Nov. 15. (Sze), 12.54
fj_pr
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
uid int(11) NOT NULL

fj_jobseeker
uid int(10) UNSIGNED NOT NULL
name varchar(60)

Az adataokat PhpMyAdminbol szedtem ki
2

Mert join

Anonymous · 2006. Nov. 15. (Sze), 12.45
Mert ezt kell csinálnia. Ha csak a szigorúan megfelelő sorokat akarod kilistáztatni, használd ezt:
SELECT jobseeker.* FROM jobseeker, pr WHERE jobseeker.uid=pr.uid;
3

inner join

Anonymous · 2006. Nov. 15. (Sze), 12.47
vagy INNER JOIN
5

Ok

Anonymous · 2006. Nov. 15. (Sze), 13.01
Ok most ertem, de mit tudok csinalni ha nem minden adat van a jobseeker tablaban. Meg kene meg tudjak par adatot egy masik tablabol.

Gondolom csak ez nem eleg:

SELECT fj_jobseeker.* FROM fj_jobseeker, fj_pr WHERE fj_jobseeker.uid=fj_pr.uid
6

Pontosan úgy működik, ahogy kell

Gáldi Ákos · 2006. Nov. 15. (Sze), 13.07
Mindent a bal táblából. Ha a jobb táblában nincs a bal táblának megfelelő rekord, akkor NULL-t ad vissza. Próbáld ki a NATURAL JOIN-t vagy fordítsd meg a lekérdezés sorrendjét.
SELECT * FROM jobseeker NATURAL JOIN pr
SELECT * FROM pr LEFT JOIN jobseeker ON(pr.uid=jobseeker.uid)
Még egy tipp. Ha a relációban szereplő mezőnevek megegyeznek, akkor használhatod a USING kifejezést:
SELECT * FROM pr LEFT JOIN jobseeker USING(uid)
7

Minek?

Anonymous · 2006. Nov. 15. (Sze), 14.14
Minek join? Fönt már megadtam a megoldás:
SELECT jobseeker.* FROM jobseeker, pr WHERE jobseeker.uid=pr.uid;
8

logikailag ez is join

Anonymous · 2006. Nov. 15. (Sze), 14.53
Talán mert logikailag ez is join, amit írsz, nemde? Csak nem írod ki a JOIN kulcsszót, ezért a WHERE-ben valahol elrejtve kell megkeresni a kapcsolat feltételét.
10

Egyszerűbb

Anonymous · 2006. Nov. 15. (Sze), 19.52
Szvsz egyszerűbb megérteni (egy kezdőnek), mint a sok join fajtát. Aztán ha kellenek a lógó sorok, akkor majd ráér a különböző join fajtákkal bíbelődni.
9

LEFT JOIN és több tábla felsorolása közti különbségek

Thomas · 2006. Nov. 15. (Sze), 19.39
Más rengeteg megoldási lehetőség közül választhatunk. A lényeg, hogy figyelni kell az optimalizálásra is. Kicsit eljátszottam a gondolattal és több megoldást is kipróbáltam. Két táblát kapcsoltam össze, az egyikben 4768 rakord a másikban 9352 rekord szerepel.
SELECT * FROM jobseeker LEFT JOIN pr USING(uid)
LEFT JOIN alkalmazásával folyamatosan 0,020 sec alatt tudtam maradni
SELECT * FROM jobseeker j, pr p WHERE j.uid = p.uid
Több tábla felsorolásakor többszöri próbálkozás mellett sem ért el jobbat 0,026-nál. Persze kevesebb adatnál ez nem feltűnő, de egy komolyabb portálnál már nagyon sokat számít.

DESCRIBE beírásával ellenőriztem, hogy mi is történik a háttérben és hamar megmutatkozott a LEFT JOIN előnye. Sokkal kevesebb munkára kényszerült szerver, egész pontosan felére.
11

kerdes

Anonymous · 2006. Nov. 15. (Sze), 22.18
Szeretnek ket JOIN-t hasznalni, valami hasonlot:
SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
  LEFT JOIN table3 ON table2.id=table3.id;
ez sokat lasitana az oldalon ? Nem lesz eppen egy portal, de lehetseges, hogy 50-100 felhasznalo lesz rajta.
12

nem probléma

Thomas · 2006. Nov. 16. (Cs), 22.42
Nem probléma és ilyen forgalomnál nem kell aggódnod, nem az sql adatgyűjtése emészti fel a legtöbb időt.
13

recommended reading

sotetbarna · 2006. Nov. 17. (P), 02.01
Ajánlom ezt, kimondottan a joinos fejezetet: MySQL - Joins

Ma olvastam, nem szabad rtfm-ezni, meg ilyenek, ezért aztán ideírom, hogy hogyan találtam rá:
beírtam a google-be a mysql join szavakat, és a 4. találat lett a fenti link.
Guglizni, guglizni ééés guglizni.

Úgy gondolom, hogy aki nem tud úszni, ne ugorjon mély vízbe; akinek meg nem inge, ne vegye magára. :)