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.
Zobrazeno 11 zpráv z 11.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
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.
