我有一個關于 SQL 語法以及我的查詢應該如何完成的問題。我已經使用兩個查詢和一些 PHP 解決了我的問題。但是,讓我介紹一下我的資料庫和問題。
表結構
使用列印表的唯一 ID,我希望能夠獲得:
- 印刷品中的 dex 編號
- 來自印刷品的影像(URL)
- 稀有中的稀有
- 當不為空時從型別 x3 中輸入,否則我仍然想執行
- 口袋妖怪 x5 的名稱不為空時,否則我仍然想執行
收集所有值時,查詢非常簡單
SELECT pr.dex,
pr.image,
p.name,
r.rarity,
t.type,
t2.type,
t3.type,
p1.name,
p2.name,
p3.name,
p4.name
FROM prints pr
JOIN pokemons p ON p.dex=pr.dex
JOIN rarities r ON r.id=pr.rarity
JOIN types t ON t.id=p.type
JOIN types t2 ON t2.id=pr.weakness
JOIN types t3 ON t3.id=pr.resistance
JOIN pokemons p1 ON p1.dex=p.evolveto
JOIN pokemons p2 ON p2.dex=p.evolveto2
JOIN pokemons p3 ON p3.dex=p.evolveto3
JOIN pokemons p4 ON p4.dex=p.evolvefrom
WHERE pr.id=2;
但對于某些, , ,或pr.id(s)的值可以而且應該為空。當其中任何一個為空時,查詢回傳為空。所以基本上我想要的是排除空值。我試圖用一些選擇來包裝并玩了一下,
但沒有成功。如果不管有什么價值,只要一個 qeury 就可以完成,那就太棒了。pr.weaknesspr.resistancep.evolvetop.evolveto2p.evolveto3p.evolvefromCOALESCE()CASEpr.id
uj5u.com熱心網友回復:
您的 INNER JOIN 具有在可能為 NULL 的欄位上執行等值連接的 ON 子句。然而,無論如何你都想得到一行,表明給定的欄位是空的。
您正在尋找的工具是 LEFT OUTER JOIN,它可以做到這一點。 https://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join
例如
SELECT cat.name, cat.price, inv.qty, inv.date
FROM catalog cat
LEFT OUTER JOIN inventory inv ON cat.id = inv.cat_id
即使它們沒有被盤點,也會顯示目錄專案。
如果需要,類似的運算式COALESCE(inv.qty, 0)
可以方便地抑制結果行中的 NULL。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480031.html
上一篇:參考SELECT之外的JOIN
