gpt4 book ai didi

mysql左连接查询

转载 作者:行者123 更新时间:2023-11-29 01:46:45 24 4
gpt4 key购买 nike

我对下面的代码段有疑问。我想知道,如果第一个查询没有带来任何结果,我还能得到第二个查询的结果吗?

select *
from
(
-- first query
) as query1
left join
(
-- second query
) as query2
on query1.id=query2.id
left join
(
-- third query
) as query3
on query1.id=query3.id;

更新:

我需要的是全连接,但是 MySQL 不支持它,有什么好的方法可以模拟它?

最佳答案

答案是否定的。

左连接将从左侧提取所有结果,并且只有右侧匹配的结果。右连接则相反。完整的外部联接将从其中一个中提取所有结果,并仅联接那些可以联接的结果。

请注意,对于当前的数据库,避免完全外部联接是明智的,因为它们的效率远低于其他联接。我个人已经成功地使用像这样的技巧将 Oracle 和 PostgreSQL 中的完全外部连接打败了几个数量级,它也可以用来模拟没有它们的数据库中的完全外部连接:

SELECT some_id
, MAX(foo) AS foo
, MAX(bar) AS bar
, MAX(baz) AS baz
, MAX(blat) AS blat
FROM (
SELECT A.some_id
, A.foo
, A.bar
, NULL as baz
, NULL as blat
FROM A
UNION ALL
SELECT B.some_id
, NULL as foo
, NULL as bar
, B.baz
, B.blat
FROM B
) AS subquery
GROUP BY some_id;

此查询有可能无法正常工作,因为数据库无法确定空列的类型。有解决方法。最简单的方法是创建一个具有显式列类型的临时表,使用 2 个插入查询模拟 UNION ALL,然后查询临时表。

(有关我的格式样式的说明,请参阅 http://bentilly.blogspot.com/2011/02/sql-formatting-style.html。)

关于mysql左连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5018167/

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