Zadejte hledaný výraz...

Zvlastne chovani MySQL pri dotazu

reverb
verified
rating uzivatele
8. 12. 2011 13:23:52
Zdravim mam dotaz ohledne SQL
Muj sql vypada nejak takhle:
SELECT id,sloupec1,... FROM tabulke WHERE 1 AND sloupec1 = hodnota AND (id <> hodnota2 OR id <> hodnota3 OR id <> hodnota4)
SQL select mi bohuzel zobrazi i polozky ktere jsou zadane v te druhe casti "AND (id <> ...)"
Ze by se zobrazit nemeli. Nevite proc. Diky za odpovedi.
8. 12. 2011 13:23:52
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705639
hm
verified
rating uzivatele
(20 hodnocení)
8. 12. 2011 13:27:21
tohle je cele uplne spatne :) na tohle se pouziva syntax IN () v pripade ze nejaka cisla chces vyloucit pak zapis NOT IN ... navic tam mas WHERE 1 AND - proc proboha? :)
WHERE sloupec1 = hodnota AND id NOT IN (1,2,4,5,6,7)
enjoy ;)
8. 12. 2011 13:27:21
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705638
reverb
verified
rating uzivatele
8. 12. 2011 13:28:06
Jo where 1 je tam proto protoze se generuje WHERE dynamicky, Takze proto to tam je.
8. 12. 2011 13:28:06
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705637
Aleš vám už poradil NOT IN, a pokud se zamyslíte, šlo by to i tím vaším zápisem - jenže potřebujete AND místo OR.
8. 12. 2011 14:44:52
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705636
hm
verified
rating uzivatele
(20 hodnocení)
8. 12. 2011 14:57:26
No pokud potrebujeme vyexcludovat nejaka konkretni ID pak z duvodu vykonu rozhodne pouzivat NOT IN, jestlize opuzijene AND a tunu podminek, bude tim trpet vykon, u vetsich tabulek je to uz hodne solidni rozdil
8. 12. 2011 14:57:26
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705635
Souhlasím s Alešem.
8. 12. 2011 17:04:28
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705634
Souhlas, (NOT) IN je rychlejší, pokud jsou ve výčtu konstanty stejného typu (čísla vs řetězce). MySQL je před vykonáním dotazu seřadí a dokáže na tu část podmínky odpovědět rychleji pomocí binárního hledání.
http://dev.mysql.com/doc/refman/5.1/en/comparison-operators.html#function_in
Zatím co u AND / OR varianty musí projít všechny části podmínky.
http://lists.mysql.com/mysql/216945
Ve svém příspěvku jsem chtěl upozornit na to, kde byla v dotazu logická chyba.
Ačkoliv v přirozeném jazyce řekneme "hodnota nesmí být X NEBO Y", z pohledu SQL myslíme "hodnota nesmí být X A zároveň nesmí být Y".
8. 12. 2011 17:44:10
https://webtrh.cz/diskuse/zvlastne-chovani-mysql-pri-dotazu#reply705633
Pro odpověď se přihlašte.
Přihlásit