Autor | Zpráva | ||
---|---|---|---|
HosipLan Profil |
#1 · Zasláno: 1. 8. 2010, 04:46:07 · Upravil/a: HosipLan
Zdravím,
potřebuji si ověřit princip jak převést subquery do query která ji obaluje SELECT r1.col1,r2.col2,r3.col3, t2.col4 FROM ( SELECT t1.col1, t1.col2, t3.col3 FROM `tabulka1` AS t1 LEFT JOIN `tabulka3` AS t3 ON t3.mId = t1.mId WHERE t1.polivka = 'slepičí' AND t3.osolena = 1 LIMIT 10 ) AS r1 LEFT JOIN `tabulka2` AS t2 ON r1.col2 = t2.mojeId WHERE t2.maso = 'telecí' teoreticky vím jak to přepsat, ale chci mít jistotu, že nato jdu správně SELECT t1.col1, t1.col2, t3.col3, t2.col4 FROM `tabulka1` AS t1 LEFT JOIN `tabulka3` AS t3 ON t3.mId = t1.mId LEFT JOIN `tabulka2` AS t2 ON r1.col2 = t2.mojeId WHERE (t1.polivka = 'slepičí' AND t3.osolena = 1) AND t2.maso = 'telecí' sakryš, teď mi tam zase chybí Limit ... jde to vůbec přepsat tak, aby se to chovalo stejně? :( |
||
Kajman_ Profil * |
#2 · Zasláno: 1. 8. 2010, 10:17:02
Ten limit v první variantě opravdu přepsání stíží. Dotaz může vrátit třeba 5 nebo 50 řádků. Nenapadá mě způsob, jak to přepsat do jednoho dotazu jen s použitím spojení.
Proč to vlastně nemůžete zapsat s poddotazem? |
||
TomášK Profil |
#3 · Zasláno: 1. 8. 2010, 12:26:04 · Upravil/a: TomášK
Myslím, že by mohlo fungovat toto (ale netestoval jsem to):
SELECT t1.col1, t1.col2, t3.col3, t2.col4 FROM `tabulka1` AS t1 LEFT JOIN `tabulka3` AS t3 ON t3.mId = t1.mId LEFT JOIN `tabulka2` AS t2 ON r1.col2 = t2.mojeId CROSS JOIN `tabulka3` AS t3b WHERE (t1.polivka = 'slepičí' AND t3.osolena = 1) AND t2.maso = 'telecí' GROUP BY t1.mId, t2.mId, t3.mId HAVING COUNT(t3b.mId <= t3.mId) <= 10 Varianta s poddotazem bude efektivnější, moje řešení bych nepoužil. |
||
HosipLan Profil |
#4 · Zasláno: 1. 8. 2010, 12:44:27
|
||
Kajman_ Profil * |
#5 · Zasláno: 1. 8. 2010, 14:34:38
Jaky je ten dotaz, ktery je pomaly? Jaky je jeho explain? Jake jsou dostupne indexy?
|
||
Časová prodleva: 14 let
|
0