【发布时间】:2019-08-06 13:39:48
【问题描述】:
我已经写了 2 条 SQL 语句。
SELECT
customers.CustomerID,
orders.OrderID
FROM customers LEFT JOIN orders ON customers.CustomerID =
orders.CustomerID AND orders.EmployeeID=4
WHERE orders.OrderID IS NULL;
还有
SELECT
customers.CustomerID,
orders.OrderID
FROM customers LEFT JOIN orders ON customers.CustomerID =
orders.CustomerID AND orders.EmployeeID=4 AND orders.OrderID IS NULL;
第一个返回 16 个条目,这是正确的(根据解决方案)。第二个返回 91 个条目。我正在使用 Northwind 的 mysql 版本。我从某处读到,在 JOIN 语句中放置条件等同于在 WHERE 语句中放置条件。但是,在这里我可以看到不同之处。
【问题讨论】:
-
参见dba.stackexchange.com/questions/196030/… "当你有一个 TableA a LEFT JOIN TableB b 场景时,你必须小心你如何在 WHERE 子句中使用 TableB 字段。对于 TableA 中没有的任何行匹配表 B 中的行,表 B 中的所有字段都将设置为 NULL。"
-
不知道可以这样。但是,我仍然会将条件放在 WHERE 中,这样对我来说更容易阅读。我也对答案感兴趣。 @DotNetDev您可以考虑创建一个答案并使用链接作为备份源进行解释。不要在 cmets 中回答。
-
this question 的答案可能会有所帮助。
-
第二个会产生更多的行。