|
| Hvordan evaluerer MySQL denne? Fra : Morten |
Dato : 12-06-07 09:27 |
|
Hej. Jeg faldt over nedenstående i min logfil, det er noget SQL der er
genereret af en komponent jeg benytter. Nogen der har et bud på, hvordan
MySQL evalierer WHERE clausen? Jeg tænker på det account_id der står og
flagrer..
SELECT * FROM departments
WHERE (account_id AND (lft > 6) and (rgt < 11))
ORDER BY lft
Morten
| |
Michael Zedeler (12-06-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 12-06-07 09:43 |
|
Morten wrote:
>
> Hej. Jeg faldt over nedenstående i min logfil, det er noget SQL der er
> genereret af en komponent jeg benytter. Nogen der har et bud på, hvordan
> MySQL evalierer WHERE clausen? Jeg tænker på det account_id der står og
> flagrer..
>
> SELECT * FROM departments
> WHERE (account_id AND (lft > 6) and (rgt < 11))
> ORDER BY lft
Uden at vide det konkret, ville jeg formode at account_id bliver
behandlet som en boolsk værdi. Præcis hvornår den er sand eller falsk må
du selv undersøge.
Mvh. Michael.
| |
Morten (12-06-2007)
| Kommentar Fra : Morten |
Dato : 12-06-07 10:15 |
|
Michael Zedeler wrote:
> Morten wrote:
>>
>> Hej. Jeg faldt over nedenstående i min logfil, det er noget SQL der er
>> genereret af en komponent jeg benytter. Nogen der har et bud på,
>> hvordan MySQL evalierer WHERE clausen? Jeg tænker på det account_id
>> der står og flagrer..
>>
>> SELECT * FROM departments
>> WHERE (account_id AND (lft > 6) and (rgt < 11))
>> ORDER BY lft
>
> Uden at vide det konkret, ville jeg formode at account_id bliver
> behandlet som en boolsk værdi. Præcis hvornår den er sand eller falsk må
> du selv undersøge.
Du har ret. Jeg er lidt overrasket over det, sikkert fordi mine vaner er
fra dengang man eksplicit sammenlignede med 0/1 for boolsk evaluering.
mysql> create table my_test (foo integer, bar integer);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into my_test values (1, null);
Query OK, 1 row affected (0.00 sec)
mysql> select * from my_test where foo;
+------+------+
| foo | bar |
+------+------+
| 1 | NULL |
+------+------+
1 row in set (0.00 sec)
mysql> select * from my_test where bar;
Empty set (0.00 sec)
mysql> insert into my_test values (2, 0);
Query OK, 1 row affected (0.00 sec)
mysql> select * from my_test where bar;
Empty set (0.00 sec)
| |
|
|