我需要找出WHERE IN子句中在数据库中不存在的项。在下面的例子中,cc33不存在,我需要查询返回cc33。该怎么做?
SELECT id FROM tblList WHERE field1 IN ('aa11','bb22','cc33')
我需要找出WHERE IN子句中在数据库中不存在的项。在下面的例子中,cc33不存在,我需要查询返回cc33。该怎么做?
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) - zerkmswhere
语句明确检查t
上的所有值是否为NULL。这样的合并在最好的情况下是多余的,在最坏的情况下会导致id
和val
类型不一致的类型冲突。 - Gordon Linoffselect l.val from ( select 'aa11' as val union all select 'bb22' union all select 'cc33' ) l left outer join tbllist t on l.val = t.field1 where t.field1 is null
- pirmas naujas对于SQL Server 2008+版本,您可以使用表值构造函数:
SELECT field1
FROM
( VALUES
('aa11'),('bb22'),('cc33')
) AS x (field1)
WHERE field1 NOT IN
( SELECT field1 FROM tblList ) ;
在SQL-Fiddle上测试过。
UNION
版本。 - ypercubeᵀᴹ