7

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

在 MySQL 中

select * 
from table 
where columnname

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

4

2 回答 2

2

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

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

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

与另一个接受表达式的上下文进行比较:选择列表。

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

在这种情况下,使用单列作为表达式是正常的。

于 2013-03-13T16:45:42.017 回答
1

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

于 2013-03-13T16:39:01.627 回答