gpt4 book ai didi

mysql - 当标准没有为第二个表产生结果时如何在 LEFT JOIN 上返回 NULL

转载 作者:行者123 更新时间:2023-11-29 01:35:07 25 4
gpt4 key购买 nike

我有表 Account,它具有零对多 Subscription,我想返回 Account.nameSubscription .结束

如果没有事件订阅,Subscription.end 应该是 NULL

这是我的(不正确的)SQL:

SELECT acc.name,
s.t_end
FROM ACCOUNT acc LEFT JOIN SUBSCRIPTION s ON acc.id = s.account_id
WHERE acc.id = 1
AND s.t_start <= CURRENT_TIMESTAMP()
AND s.t_end > CURRENT_TIMESTAMP()

我的 SQL 的问题:如果该帐户没有匹配的订阅,它将返回空集:

acc.name | s.t_end
------------------
<nothing>

我想要的:

acc.name | s.t_end
------------------
1 | NULL

最佳答案

每当使用 Left Join 时,如果右侧表上有任何 Where 条件;它将限制数据,并且您不会根据需要从最左侧的表中获取所有行。

相反,您可以将右侧表上的 Where 条件移动到连接 ON 条件:

SELECT acc.name,
s.t_end
FROM ACCOUNT acc
LEFT JOIN SUBSCRIPTION s ON acc.id = s.account_id AND
s.t_start <= CURRENT_TIMESTAMP() AND
s.t_end > CURRENT_TIMESTAMP()
WHERE acc.id = 1

此外,将尽可能多的条件放入 JOIN ON 条件中通常是一个好的做法,因为它可以提高查询的可读性。更改这些查询也会容易得多,以防更改连接类型。

关于mysql - 当标准没有为第二个表产生结果时如何在 LEFT JOIN 上返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53028811/

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