我需要找到WHERE IN子句中的哪些項不存在於數據庫中。在下面的例子cc33不存在,我需要查詢返回cc33。 我該怎麼做?Where where sql query
SELECT id FROM tblList WHERE field1 IN ('aa11','bb22','cc33')
我需要找到WHERE IN子句中的哪些項不存在於數據庫中。在下面的例子cc33不存在,我需要查詢返回cc33。 我該怎麼做?Where where sql query
SELECT id FROM tblList WHERE field1 IN ('aa11','bb22','cc33')
你需要把這些值到一個表,而不是一個列表:
with list as (
select 'aa11' as val union all
select 'bb22' union all
select 'cc33'
)
select l.val
from list l left outer join
tbllist t
on l.val = t.field1
where t.field1 is null
爲什麼不選擇'SELECT COALESCE(t.id,l.val)'? (無論如何+1) – zerkms 2013-03-04 20:54:03
我打算做3個單獨的JOIN。這好多了。即使沒有CTE,我們也可以將UNION作爲具有相同邏輯的子查詢。 – 2013-03-04 20:57:19
@zerkms。 .. where語句顯式檢查't'上的所有值都是NULL。如果'id'和'val'是不同的類型,這樣的聚合最多是多餘的,最壞的情況會導致類型衝突。 – 2013-03-04 20:59:50
對於2008+的SQL Server版本,你可以使用一個Table Value Constructor:
SELECT field1
FROM
(VALUES
('aa11'),('bb22'),('cc33')
) AS x (field1)
WHERE field1 NOT IN
(SELECT field1 FROM tblList) ;
已測試SQL-Fiddle
此查詢也在工作,但我無法使其在sql2000中工作 – 2013-03-04 21:40:05
是的,它是在2008版本中添加的。它不適用於2000或2005版本。 – 2013-03-04 21:41:15
對於以前的版本,您必須堅持Gordon回答的'UNION'版本。 – 2013-03-04 21:44:04
你會有多個ID爲每個field1? – 2013-03-04 20:52:55
id是唯一的 – 2013-03-04 20:55:52