簡體   English   中英

SQL - 使用 null 作為通配符

[英]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:nullTarendo.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM