[英]SQL - using null as a wildcard
我要加入兩張桌子,Linnmon 和 Tarendo。
SELECT
Linnmon.ID AS Linnmon,
COUNT(Tarrendo.ID) AS Tarrendous
FROM
( SELECT * FROM
(SELECT 1 AS ID, 'RED' AS Colour FROM Dual)
UNION (SELECT 2 AS ID, 'BLUE' AS Colour FROM Dual)
UNION (SELECT 3 AS ID, null AS Colour FROM Dual)
) Linnmon
LEFT OUTER JOIN Tarendo
ON Tarendo.Colour = Linnmon.Colour
Linnmon.Colour:null
是一個通配符並匹配任何Tarendo.Colour
,所以:
ON Tarendo.Colour = NVL(Linnmon.Colour, Tarendo.Colour)
但是,今天我正在處理Tarendo.Colour
可以為null
的數據,並且我想將Linnmon.Colour:null
與Tarendo.Colour
的任何值(包括null
)進行匹配。
我想出了這個,它有效,但是使用字符串文字和這么多NVL
感覺不對 - 有更好的方法嗎?
ON NVL(Tarendo.Colour, 'asdf') = NVL(Linnmon.Colour, NVL(Tarendo.Colour, 'asdf'))
鑒於我自己組裝了Linnmon
我自己的 SQL 語句中的一個 DIY 組裝——我並不局限於使用null
作為通配符,如果有更好的做法,我可以改為這樣做。
使用明確的邏輯而不是神奇的值:
ON (Tarendo.Colour = Linnmon.Colour) OR
(Linnmon.Colour IS NULL)
如果 Linnmon.Colour IS NULL 應匹配任何 Tarendo.Colour,則ON
子句變為:
ON Tarendo.Colour = Linnmon.Colour OR Linnmon.Colour IS NULL
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.