Autor | Zpráva | ||
---|---|---|---|
Manny Profil * |
#1 · Zasláno: 24. 4. 2010, 14:53:57
Ahoj, pokouším se vytáhnout data, která je potřeba kontrolovat ve 3. tabulkách. Data se mi vypíší, ale nikdy správné hodnoty. Mám takové struktury tabulek.
Tab1: ==== id nazev ... Tab2: ==== id tab1_id cislo_popisne Tab3: (obsahuje vybrana data) ==== id neco (neco == Tab2.id) v Tab3 mám 3 záznamy, a to s hodnotami: 100 300 200 a zkouším si tato data vypsat takto: SELECT Tab1.*, Tab2.cislo_popisne FROM Tab1, Tab2, Tab3 WHERE Tab1.id=Tab2.tab1_id AND Tab2.id=Tab3.neco AND Tab1.id=3 Dostanu jako výsledek hodnoty 200 200 200 (zkrátka tu poslední zvolenou hodnotu) Když zkusím: SELECT Tab1.*, Tab2.cislo_popisne FROM Tab1 LEFT JOIN Tab2 ON Tab1.id=Tab2.tab1_id LEFT JOIN Tab3 ON Tab2.id=Tab3.neco WHERE Tab1.id=5 A dostanu: 300 300 300 (zkrátka tu nejvyšší zvolenou hodnotu) Nevěděl by pls někdo, jak se dostat ke všem hodnotám, abych dostal na výstupu ony 100 300 200 Díky. (PS - snad jsem ty tabulky přepsal správně) |
||
AM_ Profil |
#2 · Zasláno: 24. 4. 2010, 20:20:46
Možná by to chtělo názornější příklad, než tabulky pojmenované Tab1-3 a sloupce "něco" :) takhle si ani nějak neumím představit, jak že to vlastně má fungovat.
Jinak selectování z více tabulek kartézským součinem (oddělené čárkou) nepovažuji vzhledem k vnitřní implementaci za šťastné, raději používám (a přijde mi i přehlednější) joinování, vypadá to nějak takhle: SELECT vyrobky.id, vyrobky.nazev, skupiny.nazev AS skupina_nazev FROM vyrobky LEFT JOIN skupiny ON vyrobky.skupina = skupiny.id WHERE podminka (převzato z http://www.root.cz/clanky/spojovani-tabulek/) |
||
Časová prodleva: 14 let
|
0