这是一个有效的SQL条件表达式还是MySQL错误(功能)?

时间:2013-03-12 14:32:45

标签: mysql sql

尝试调试一些似乎返回笛卡尔积的连接,我将等效的ON条件键入选择。

在MySQL中

select * 
from table 
where columnname

似乎表现得好像我输入了where columname is not null。在联接中,键入on table.columnname被接受但返回很多行。如果我将其更正为on table1.column=table2.column,MySQL会做正确的事情但肯定我的第一个版本不正确且非法。

2 个答案:

答案 0 :(得分:2)

您正在讨论的上下文,联接中的WHERE子句和ON子句只是接受一个表达式。

SELECT ...
FROM table1 JOIN table2 ON <expr>
WHERE <expr>

表达式可以包含比较运算符,例如=,但表达式也可以像单个列或单个常量值一样简单。

与另一个接受表达式的上下文比较:select-list。

SELECT <expr>, <expr>, <expr>

在此上下文中使用单个列作为表达式是正常的。

答案 1 :(得分:1)

大多数编程语言都将除null,0,'',false之外的所有值都视为true。 而(1);是一个无限循环,无论你是否给1,2,'a',真等等。我会说它是一个默认的预期行为,我经常使用类似的where子句