尝试调试一些似乎返回笛卡尔积的连接,我在选择中输入了等效的 ON 条件。
在 MySQL 中
select *
from table
where columnname
似乎表现得好像我输入了where columname is not null
. 在连接中输入on table.columnname
被接受,但返回很多行。如果我纠正它,MySQL 会做正确的事情,on table1.column=table2.column
但我的第一个版本肯定是不正确和非法的。
您正在谈论的上下文,连接中的WHERE
子句和ON
子句,只需接受一个表达式。
SELECT ...
FROM table1 JOIN table2 ON <expr>
WHERE <expr>
表达式可以包括比较运算符,=
但表达式也可以像单个列或单个常量值一样简单。
与另一个接受表达式的上下文进行比较:选择列表。
SELECT <expr>, <expr>, <expr>
在这种情况下,使用单列作为表达式是正常的。
大多数编程语言将除 null、0、''、false 之外的所有值视为 true。而(1);无论您是否给出 1,2,'a',true 等等,都是一个无限循环。我会说这是默认的预期行为,我经常使用类似的 where 子句