如何在使用左外連接時排除一組值?排除來自左外連接的集合
考慮下面的查詢:
SELECT i.id,
i.location,
area.description
FROM incident_vw i,
area_vw area
WHERE i.area_code = area.code(+)
AND i.area_code NOT IN ('T20', 'V20B', 'V20O', 'V20P')
查詢執行,但沒有無效區域代碼值出現的。
BE AWARE:INCIDENT_VW.area_code
can和does有NULL值。
有關如何在不使用PL/SQL的情況下匹配NULL事件區碼而排除給定的一組區碼的任何想法?
ANSI更新
使用等效ANSI SQL也不起作用:
SELECT i.id,
i.location,
area.description
FROM incident_vw i
LEFT JOIN area_vw area
ON area.code = i.area_code
WHERE i.area_code NOT IN ('T20', 'V20B', 'V20O', 'V20P')
解決方案
這工作:
SELECT i.id,
i.location,
area.description
FROM incident_vw i,
area_vw area
WHERE i.area_code = area.code(+)
AND (i.area_code NOT IN ('T20', 'V20B', 'V20O', 'V20P') and i.area_code IS NULL)
感謝大家!
@戴夫:停止使用'WHERE 1 = 1' - 1 = 1什麼都不做,得到優化。 – 2009-09-16 18:24:19
@Dave:請確認'INCIDENT_VW.area_code'是否可以有NULL值。 – 2009-09-16 18:27:25
@Dave:1)鏈接是針對SQL Server的,而不是Oracle 2)鏈接說明了我所做的 - 1 = 1什麼都不做。 – 2009-09-16 18:28:27