Autor | Zpráva | ||
---|---|---|---|
lubek Profil * |
#1 · Zasláno: 27. 2. 2011, 01:42:09
ahoj,
nevím jestli jsem všechno správně pochopil, ale nedaří ze se mi rozběhat OUTER JOIN. Mám dvě tabulky - v jedné filmy a ve druhé hodnocení. Některé filmy již byly hodnoceny, takže v tabulce "hodnoceni" mají záznam, jiné nikoliv. pokud spustím dotaz s INNER JOIN tak mi to vybere správně jen hodnocené filmy. pokud spustím dotaz s LEFT JOIN popř. LEFT OUTER JOIN tak mi to vybere všechny filmy a který film není hodnocen bude mít jeho známka hodnotu NULL ale pokus spustím jen OUTER JOIN abych získal z DB jen nehodnocené filmy, tak mi to vypíše syntaxní chybu: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OUTER JOIN `hodnoceni` h ON f.`id` = h.`id_filmu` LIMIT 0, 30' at line 3 Zápis dotazu vypadá takto: SELECT * FROM `filmy` f OUTER JOIN `hodnoceni` h ON f.`id` = h.`id_filmu` Děkuji za radu. |
||
Alphard Profil |
#2 · Zasláno: 27. 2. 2011, 02:07:06
Psát outer je docela exotické, správný zápis je myslím např. left outer join, ale stejně nebude fungovat, jak chcete (radši se podívejte do manuálu).
Mělo by jí SELECT * FROM `filmy` f LEFT JOIN `hodnoceni` h ON f.`id` = h.`id_filmu` where h.id_filmu is null |
||
lubek Profil * |
#3 · Zasláno: 27. 2. 2011, 11:10:50
Alphard:
Proč by nemělo fungovat? Jinak s souhlasím, že použití outer join je opravdu jak říkáte "exotické". Nicméně ho teď použít musím, protože se nejedená o řešení praktického problému, ale jen o demonstrativní ukázku jak fungují všechny typy join. A outer join popř. full outer join jsem narazil a nevím co s nimi... |
||
Kajman_ Profil * |
#4 · Zasláno: 28. 2. 2011, 09:02:05
lubek:
„ale pokus spustím jen OUTER JOIN abych získal z DB jen nehodnocené filmy, tak mi to vypíše syntaxní chybu:“ „Proč by nemělo fungovat?“ Protože joiny takhle (bez toho zmíněného omezení díky where) nefungují. Kde jste přišel na to, že jde psát pouze outer join a že to takhle funguje? Jinak full outer join některé databáze umí, ale mysql k nim nepatří. Ale ten by vám vypsal spojení dané podmínkou podobně jako inner join ale navíc včetně filmů, které nebyly hodnocené a včetně hodnocení, které nepatří k žádnému filmu. |
||
lubek Profil * |
#5 · Zasláno: 28. 2. 2011, 11:05:54
Kajman:
Protože joiny takhle (bez toho zmíněného omezení díky where) nefungují. Toto přeci není pravda... Jak jsem psal na začátku: INNER JOIN – vrátí jen spárované záznamy - funguje bez WHERE SELECT * FROM `filmy` f INNER JOIN `hodnoceni` h ON f.`id` = h.`id_filmu` LEFT JOIN – vrátí spárované záznamy a nespárované s hodnotou NULL- funguje bez WHERE SELECT * FROM `filmy` f LEFT JOIN `hodnoceni` h ON f.`id` = h.`id_filmu` OUTER JOIN – by měl vrátit jen nespárované záznamy - WHERE. Pokud přidám podmínku WHERE, tak bych očekával, že budu filtrovat pouze vrácené nespárované záznamy a ne, že budu až podmínkou oddělovat tyto záznamy. Viz. LEFT JOIN od Alphard Jak bys prosím v tomto případě OUTER JOIN zapsat ty (i treba s WHERE) a proč? |
||
Kajman_ Profil * |
lubek:
„OUTER JOIN – by měl vrátit jen nespárované záznamy“ V jaké dokumentaci jsi tohle chování našel? Zkus to porovnat např. s popisem na wikipedii. |
||
lubek Profil * |
#7 · Zasláno: 28. 2. 2011, 14:27:06
Opss… tak chyba je na mé straně! V manuálu MySQL dev.mysql.com jsem přesně nepochopil, jak outer join funguje. Hledal jsem dál a na webu a našel jsem zapsaný samotný outer join na tutorialy.vytvorweb.cz Dále jsem se asi moc zaměřil na to, abych takto samostatně zapsaný outer join rozběhal. A díky jeho názvu a špatně pochopeného manuálu jsem došel k závěru, že funguje tak jak jsem zde popsal.
Vůbec mě nenapadlo kouknout na wiki. A teď když pročítám odkaz, který jsi mi poslal, tak zjišťuji, že LEFT JOIN = OUTER LEFT JOIN je to tak? Potom ale nechápu, proč se tomu říká exotické spojení, když left join je běžně používané spojení. |
||
lubek Profil * |
#8 · Zasláno: 28. 2. 2011, 14:29:46
Samozřejmě LEFT OUTER JOIN a ne OUTER LEFT JOIN.
|
||
Kajman_ Profil * |
#9 · Zasláno: 28. 2. 2011, 18:34:36
lubek:
„LEFT JOIN = LEFT OUTER JOIN je to tak?“ Ano. „Potom ale nechápu, proč se tomu říká exotické spojení,“ A kdo tomu tak říká? Jestli nebude exot spíš autor toho textu ;-) |
||
Časová prodleva: 13 let
|
0