我有兩個表:如何返回最大或NULL,如果在沒有留下任何值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有點生疏,那麼我該如何實現呢?
位置更改到與 – Strawberry
問題是where子句使加入就好像它是一個內部聯接。由於a.seq max將消除空值。你可以通過將限制作爲連接的一部分施加在表上來解決這個問題,所以限制在連接發生之前施加,允許空值。 – xQbert
如果我將第一個WHERE更改爲AND,它將返回多行 - 我只想要一個行(對於指定的頁面)。 – nakb