gpt4 book ai didi

mysql - 如果 LEFT JOIN 中没有值,如何返回 max 或 NULL

转载 作者:行者123 更新时间:2023-11-29 22:24:28 27 4
gpt4 key购买 nike

我有两个表:

page
p_key name
1 home
2 projects
3 contacts

article
p_key page_id seq (+ other article content fields)
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2

article.seq 指定文章在页面上显示的顺序。

我需要一个查询,该查询将返回包含 page.p_key 和该页面上文章的当前最大article.seq 的单个记录,如果该页面没有文章,则返回 NULL。

目前我有:

SELECT p.p_key, a.seq FROM page p 
LEFT JOIN article a ON p.p_key = a.page_Id
WHERE a.seq =
(SELECT MAX(seq) FROM article a2
WHERE a2.page_id = 1);

对于 p.p_key 的这个值,这可以正确工作,返回 [1, 3]

但是,如果页面没有文章(例如,如果我将“WHERE a2.page_id = 1”更改为“WHERE a2.page_id = 3”),则查询不会返回任何记录。我需要的是它返回 [3, NULL] (我正在寻找 LEFT JOIN)。

我承认我的 SQL 有点生疏,那么我该如何实现这一点呢?

最佳答案

根据您的需求描述,我不明白您查询中的 a2.page_id = 1。以下内容应返回您所要求的内容:

SELECT p.p_key,
(SELECT MAX(a.seq)
FROM article a
WHERE p.p_key = a.page_Id
) as seq
FROM page p ;

为了提高性能,我建议在 article(page_Id, seq) 上建立索引。

编辑:

对于特定页面,您可以在外部查询中放置一个WHERE子句:

SELECT p.p_key,
(SELECT MAX(a.seq)
FROM article a
WHERE p.p_key = a.page_Id
) as seq
FROM page p
WHERE p.p_key = $page;

关于mysql - 如果 LEFT JOIN 中没有值,如何返回 max 或 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30397627/

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