Я объединяю два стола, Линнмон и Тарандо.
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
s чувствует себя неправильно - есть ли лучший способ?
ON NVL(Tarendo.Colour, 'asdf') = NVL(Linnmon.Colour, NVL(Tarendo.Colour, 'asdf'))
Учитывая, что я сам собрал Linnmon
- самостоятельную сборку в моем собственном утверждении SQL - я не привязан к использованию null
как подстановочный знак, и если есть лучшая практика, я мог бы сделать это вместо этого.