Autor Zpráva
gaminn
Profil *
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
GROUP BY tab1.id
gaminn
Profil *
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
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 *
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 *
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 *
Díky, vyzkouším.

Samozřejmě, že jedinečný klíč tam mám, ale group by není možné použít.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0