Diskuze: Multiple join ze stejné tabulky podruhé
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 11 zpráv z 11.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Na tohle je lepší než WHERE udělat JOIN.
SELECT cesty1.cislo, cesty1.zakazka1, cesty1.zakazka2, prvnizakazka.referent, druhazakazka.referent
FROM CESTY1 as cesty1
INNER JOIN OBAZ2015 as prvnizakazka ON cesty1.cislo = prvnizakazka.cislo_zakazky
INNER JOIN OBAZ2015 as druhazakazka ON cesty1.cislo = druhazakazka.cislo_zakazky
ORDER BY cesty1.cislo
Jak psal kolega, použij JOIN. Jen pokud některá data nemusí být v tabulce, je třeba použít "OUTER JOIN", buď RIGHT OUTER JOIN nebo LEFT OUTER JOIN podle toho v které tabulce můžou být nevyplněné hodnoty...
Pravda, spletl jsem si JOIN, nemá to být INNER JOIN ale OUTER.
V tvém případě to bude LEFT JOIN pouze, protože chceš všechny hodnoty z
tabulky CESTY1 a k tomu všechny z ostatních ale zároveň pro neexistujicí
přesto vložit tu z CESTY1.
Výsledný dotaz tedy bude:
SELECT cesty1.cislo, cesty1.zakazka1, cesty1.zakazka2, prvnizakazka.referent, druhazakazka.referent
FROM CESTY1 as cesty1
LEFT JOIN OBAZ2015 as prvnizakazka ON cesty1.cislo = prvnizakazka.cislo_zakazky
LEFT JOIN OBAZ2015 as druhazakazka ON cesty1.cislo = druhazakazka.cislo_zakazky
ORDER BY cesty1.cislo
No Nevím proč mi to nejde editovat, samozřejmě Odpovědět mělo být na první příspěvek. tudíž se omlouvám za omyl
Ahoj, vyzkoušel jsem, ale dostávám špatný výsledky. Hodnota referent je u všech záznamů NULL. Vyzkoušel jsem pro jednoduchost pouze spojení na zakazka1, výsledek je stejný. Přitom data mám snad v pořádku.
Zkus místo "prvniZakazka.referant" napsat celou cestu "08AZ2015.referant".
To už jsem zkusil taky, zrušil jsem ty ASy , má m to takhle:
SELECT cesty1.cislo, cesty1.zakazka1, cesty1.zakazka2, O8AZ2015.referent
FROM Orsoft.dbo.CESTY1
left join Orsoft.dbo.O8AZ2015 on cislo = O8AZ2015.cislo_zakazky
order by cesty1.cislo
Výsledek je ale stejnej.
Jak se tak dívám na schéma - spojuješ to přes sloupec cislo, nebo přes sloupec *zakazka1", eventuelně "zakazka2"? Protože dotaz spojuje přes číslo, ale tam jsou nějaké bláznivé cifry. Spíš to vypadá, že to chceš spojit přes zakázky. Ale budeš mít problém s tím, že máš dva sloupce pro zakázku - budeš muset vybírat ze dvou. Nebylo by jednodušší, pro to vyvořit vlastní tabulku? Nevím, jaký máš návrh zbytku databáze a programu.
Jasně !!!!
Opsal jsem ten dotaz z odpovědi od MrPabloz a toho spojení sem si vůbec
nevšiml. Správně tedy ten dotaz je:
SELECT CESTY1.cislo, cesty1.zakazka1, cesty1.zakazka2, prvnizakazka.referent, druhazakazka.referent
FROM CESTY1 as cesty1
LEFT JOIN O8AZ2015 as prvnizakazka ON cesty1.zakazka1 = prvnizakazka.cislo_zakazky
LEFT JOIN O8AZ2015 as druhazakazka ON cesty1.zakazka2 = druhazakazka.cislo_zakazky
ORDER BY cesty1.cislo
Děkuju Vám moc !!!
Zobrazeno 11 zpráv z 11.