尝试调试一些似乎返回笛卡尔积的连接,我将等效的ON条件键入选择。
在MySQL中
select *
from table
where columnname
似乎表现得好像我输入了where columname is not null
。在联接中,键入on table.columnname
被接受但返回很多行。如果我将其更正为on table1.column=table2.column
,MySQL会做正确的事情但肯定我的第一个版本不正确且非法。
答案 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子句