我根据where子句中的ID列搜索表。我有一个可能存在或可能不存在于此表中的ID列表。一个简单的查询将为我提供该表中存在的ID(如果有的话)。有没有办法同时返回未找到的ID?
Table --
ID
1GH
2BN
3ER
SELECT *
FROM Table
WHERE ID IN (big list 9FG, 1GH, 3UI etc)
--If ID's in above list are not in table, then show those ids.
期望的输出 -
9FG, 3UI were not found in the table
答案 0 :(得分:4)
如果我理解你需要什么,你可以这样做
SELECT q.id,
CASE WHEN t.id IS NULL THEN 'no' ELSE 'yes' END id_exists
FROM
(
SELECT '9FG' id UNION ALL
SELECT '1GH' UNION ALL
SELECT '3UI'
) q LEFT JOIN table1 t
ON q.id = t.id
输出:
| ID | ID_EXISTS | |-----|-----------| | 9FG | no | | 1GH | yes | | 3UI | no |
或者如果您只需要一个不存在的ID列表
SELECT q.id
FROM
(
SELECT '9FG' id UNION ALL
SELECT '1GH' UNION ALL
SELECT '3UI'
) q LEFT JOIN table1 t
ON q.id = t.id
WHERE t.id IS NULL
输出:
| ID | |-----| | 9FG | | 3UI |
诀窍是使用OUTER JOIN
代替WHERE
条件来过滤表中的数据,并能够看到不匹配。
这是 SQLFiddle 演示
答案 1 :(得分:2)
要搜索,您可以使用
SELECT *
From Mytable
where id in (
select id from (values (1), (2), (3)) as SearchedIds(Id) )
和找不到的相反:
SELECT id from (values (1), (2), (3)) as SearchedIds(Id)
WHERE id not in (SELECT id From MyTable)
语法
Values(...) asSearchedIds(id)
在Sql2008中支持,对于Sql2005,您必须执行
( SELECT 1 as Id UNION ALL SELECT 2 UNION ALL ...etc ) as SearchedIds
注意:您可以使用JOINS(INNER和LEFT)重写这些查询
答案 2 :(得分:0)
可能是这样的:
SELECT id FROM my_table WHERE id NOT IN(val1,val2,val3)