gpt4 book ai didi

mysql - 在MySQL中指定 'Full Outer Join'条件的目的是什么?

转载 作者:行者123 更新时间:2023-11-29 05:15:42 24 4
gpt4 key购买 nike

我有一个“完全外部连接”的查询:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

据我所知 MySQL 中“完全外部联接”的目的是返回左表(客户)中的所有行,以及右表(订单)中的所有行。

如果“客户”中的行在“订单”中没有匹配项,或者如果“订单”中的行在“客户”中没有匹配项,那么这些行也会列出。

我的疑问/疑问是,如果 MySQL 中的“Full Outer Join”会从两个表中返回行,而不考虑匹配元素,那么是否有必要在 WHERE 子句中指定条件?我不能跳过它吗?

请给我关于 MySQL RDBMS 的规范和中肯的答案。

谢谢。

最佳答案

当您在 WHERE 中指定某些内容时您必须确保检查 NULL 的子句值(value)观,也像这样:

...
WHERE (col1 = 'whatever' OR col1 IS NULL)
AND (col2 = 'other_value' OR col2 IS NULL)
...

如果您不检查 NULL你的FULL OUTER JOIN实际上变成了 INNER JOINLEFT/RIGHT JOIN .


如果您打错了,意思是“为什么要在 ON 子句中指定条件?”,那么答案是没有 ON条款你JOIN实际上是一个 CROSS JOIN ,这意味着一个表的每一行都与另一个表的每一行相关联,这是完全不同的事情。


为了使这个答案更具体到 MySQL,实际上没有 FULL OUTER JOIN在 MySQL 中,你必须用 LEFT JOIN ... UNION ... RIGHT JOIN 来模拟它.但同样的原则仍然适用。

a left join b using (id)
where b.col1 = 'x'

相同
a inner join b using (id)
where b.col1 = 'x'

实际上你必须这样写

a left join b on a.id = b.id and b.col1 = 'x'

真正有一个左连接。或者当然

a left join b using (id)
where b.col1 = 'x' or b.col1 is null

关于mysql - 在MySQL中指定 'Full Outer Join'条件的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33196544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com