Autor Zpráva
printf_jinde
Profil *
Mám dotaz typu

SELECT tab1.data, tab2.data FROM tab1 LEFT JOIN tab2 ON tab1.id=tab2.id2 WHERE tab2.key=$key OR tab2.key='';

potřeboval bych aby ta druhá podmínka WHERE byla splněna pokud JOIN v tab2 nenalezl záznam splňující tab1.id=tab2.id. Současná syntaxe tab2.id2 mi sice funguje, ale zajímalo by mě jestli to nejde zapsat lépe, třeba jako OR ISEMPTY tab2.key nebo podobně.

Podotýkám že tab2.key je typu int, takže mi to tab2.key='' nepřipadá moc čisté.

Díky
igamenir
Profil
//EDIT - špatná odpověď. Tahle je lepší:
Nevím přesně co chceš, ale asi toto:
SELECT tab1.data, tab2.data FROM tab1 LEFT JOIN tab2 ON tab1.id=tab2.id2 OR tab2.key = $key OR tab2.key IS NULL;

popř.
SELECT tab1.data, tab2.data FROM tab1, tab2 WHERE tab1.id=tab2.id2 OR tab2.key = $key OR tab2.key IS NULL;
printf_jinde
Profil *
jo tak to je přesně ono, ani nevím jak jsem na IS NULL mohl zapomenout :-)
Díky
printf_jinde
Profil *
Tak přecejen je v tom jiný problém, který mě předtím nenapadl. Jakmile se ve WHERE ptám na nějaký prvek z té druhé tabulky (třeba i jestli je nulový), tak to vypíše jen řádky, pro které ta druhá tabulka existuje.

Jinými slovy:
potřebuji vypsat každý řádek z první tabulky a k němu řádek z druhé tabulky aby tab1.id=tab2.id2 a tab2.key=$key, a pokud takový neexistuje, vypsat jen ten z první tabulky.

Bohužel tedy ani ten můj původní sql dotaz nedělá to co chci :-(
Kajman
Profil *
Mělo by stačit tu podmínku na key hodit do joinovací podmínky.

SELECT tab1.data, tab2.data FROM tab1 LEFT JOIN tab2 ON (tab1.id=tab2.id2 and tab2.key=$key)
printf_jinde
Profil *
Kajman
Zatím to vypadá, že to s tou podmínkou v JOINu funguje ale raději se ještě nebudu moc radovat abych to nezakřikl :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0