我有一个'完全外部加入'的以下查询:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
据我所知, MySQL 中'Full Outer Join'的目的是返回左表(Customers)中的所有行,以及右表(Orders)中的所有行 .
如果“客户”中的行在“订单”中没有匹配项,或者“订单”中的行中没有“客户”中的匹配项,则也会列出这些行 .
我怀疑/查询是否 MySQL 中的'Full Outer Join'将返回两个表中的行而不管匹配的元素是否有必要在WHERE子句中指定条件?我不能跳过它吗?
请给我关于 MySQL RDBMS的规范和答案 .
谢谢 .
1 回答
当您在
WHERE
子句中指定某些内容时,您必须确保检查NULL
值,如下所示:如果你没有检查
NULL
,你的FULL OUTER JOIN
实际上变成INNER JOIN
或LEFT/RIGHT JOIN
.如果你有一个拼写错误并且意味着“为什么在
ON
子句中指定条件?”,那么答案是没有ON
子句你的JOIN
实际上是CROSS JOIN
,这意味着,一个表的每一行都与每一行相关联从另一张 table ,这是一个完全不同的东西 .为了使这个答案更具有MySQL特定性,MySQL中实际上没有
FULL OUTER JOIN
,你必须使用LEFT JOIN ... UNION ... RIGHT JOIN
来模拟它 . 但仍然适用同样的原则 .是相同的
而你实际上必须写它
真的有一个左连接 . 或者当然