我有兩張桌子,一張保存一些類別,另一張保存玩家的記錄,如下所示:
Categories Times
id Name id UserId MapId CategoryId Time
1 cat1 1 1 1 1 1500
2 cat2 2 3 1 2 3000
3 cat3 3 13 1 3 2500
4 cat4 4 12 1 4 1500
5 cat5 5 11 1 4 1000
我想選擇所有類別(id、name)和每個類別的最低時間。如果該類別沒有記錄,則應顯示 NULL 或 0。這將是預期的結果:
Result
id Name Time
1 cat1 1500
2 cat2 3000
3 cat3 2500
4 cat4 1000
5 cat5 0
我正在使用以下查詢,但它只選擇在 Times 中已經有記錄的類別。例如,如果我使用以下查詢,它不會選擇“cat5”,因為它在 Times 表中沒有任何記錄。
select t2.id, t2.Name, min(t1.Time) as Time
from Times t1
join Categories t2 on t2.id = t1.CategoryId
where t1.MapId = %MAPID%
group by t2.id
uj5u.com熱心網友回復:
在這種情況下,我建議您從表“類別”開始查詢,因為您的重點是該表中的資料。所以你可以寫一個左連接。此外,我認為將空值替換為零是個好主意,因此您的查詢將作為示例找到負時間作為最低時間,如果最低時間是空值,則回傳 0。總的來說,這可能是您的目標:
SELECT c.id, c.name, MIN(COALESCE(t.time,0)) AS time
FROM categories c LEFT JOIN times t ON c.id = t.categoryid
GROUP BY c.id, c.name;
這是根據您的示例資料的作業示例:db<>fiddle
可能還有其他選擇可以實作您的目標,您可以嘗試一下。
uj5u.com熱心網友回復:
我認為您可能只需要進行正確的聯接(因為您希望列出第二個表中的所有行 - 類別)。將第 3 行更改為:
right join Categories t2 on t2.id = t1.CategoryId
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/468429.html
