[英]How to return max or NULL if no values in LEFT JOIN
我有兩個表:
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;
另一種通用的方法是使用帶有連接的GROUP BY
,大多數聚合函數將為空源數據返回空結果:
SELECT Page.p_key, MAX(Article.seq)
FROM Page
LEFT JOIN Article
ON Article.page_id = Page.p_key
-- WHERE Page.p_key = 1
GROUP BY Page.p_key
返回預期結果:
p_key MAX(Article.seq)
1 3
2 2
3 (null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.