Autor | Zpráva | ||
---|---|---|---|
gaminn Profil * |
#1 · Zasláno: 12. 11. 2006, 14:16:46
Zdravím,
mám tabulku tab1, ke které pomocí JOIN připojuji tabulku tab2, která obsahuje např. deset záznamů. Všechny tyto záznamy v SQL dotazu vyhovují podmínce pro připojení k tab1, takže jsou připojeny všechny. To mi je ale v tomto konkrétním případě na obtíž, nejde udělat nějaký limit na to, kolik záznamů připojit? V mém případě právě požaduji, aby byl připojen max. 1 záznam, více jich nepotřebuji a akorát mi zahlcují výstup. V tabulce tab2 ale tato data zůstat musí, nelze je nijak odstranit. |
||
djlj Profil |
#2 · Zasláno: 12. 11. 2006, 14:19:26
GROUP BY tab1.id
|
||
gaminn Profil * |
#3 · Zasláno: 12. 11. 2006, 14:36:17
Ne, group by slouží k něčemu jinému, já chci opravdu něco na způsob limitu. Ty záznamy mohou být absolutně odlišné (je tedy asi celkem nepochopitelné, proč mi z těchto úplně odlišných záznamů stačí vždy jeden, ale je to tak).
|
||
djlj Profil |
#4 · Zasláno: 12. 11. 2006, 14:38:45
No však pokud bys to na konci dotazu GROUPnul, tak z toho budeš vždy mít jen jeden JOINnutej řádek z tab2...
SELECT tab1.neco, tab2.neco FROM tab1 JOIN tab2 ON tab1.id=tab2.id GROUP BY tab1.id Nebo jsem to teda asi blbě pochopil... |
||
gaminn Profil * |
#5 · Zasláno: 12. 11. 2006, 15:27:17
Jo jasně, nějak takhle by to v tomhle případě šlo. Jenže já mám na tab1 navěšenou ještě spoustu jiných záznamů, takže id z tab1 se vyskytuje ve více záznamech, group by my tyto záznamy odstranilo.
Přišel jsem na způsob, ale přijde mi trochu kostrbatý. Měl jsem tento dotaz: SELECT * FROM tab1 LEFT JOIN tab2 ON tab2.tab1_id = tab1.id AND tab2.sloupec IN (1, 2, 3, 4) který jsem upravil na: SELECT * FROM tab1 LEFT JOIN tab2 ON tab2.tab1_id = tab1.id AND tab2.sloupec = (SELECT sloupec FROM tab2 WHERE tab2.tab1_id = tab1.id AND sloupec IN (1, 2, 3, 4) LIMIT 1) |
||
Kajman_ Profil * |
#6 · Zasláno: 12. 11. 2006, 16:42:32
Pokud máte problémy s tím group by (není v tab1 jedinečný klíč, což je divnost veliká), tak něco takového by možná mohlo být rychlejší než ten poslední příklad...
select t1.*,t2.* from tab1 t1 left join (select tab1_id, max(sloupec) maxsloupec from tab2 where sloupec in (1,2,3,4) group by tab1_id) x on t1.id=x.tab1_id left join tab2 t2 on x.maxsloupec=t2.sloupec and x.tab1_id=t2.tab1_id |
||
gaminn Profil * |
#7 · Zasláno: 12. 11. 2006, 23:28:13
Díky, vyzkouším.
Samozřejmě, že jedinečný klíč tam mám, ale group by není možné použít. |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0