我们假设如下:
表A.
id | value
----------
1 | red
2 | orange
5 | yellow
10 | green
11 | blue
12 | indigo
20 | violet
Run Code Online (Sandbox Code Playgroud)
我有一个id(10,11,12,13,14)列表,可用于在此表中查找id.这个id列表是在我的前端生成的.
使用纯SQL,我需要从表A中没有条目的列表(10,11,12,13,14)中选择id(加入'id'列).结果应该是id 13和14的结果集.
如何仅使用SQL来实现此目的?(另外,如果可能的话,我想避免使用存储过程)
我能想到的唯一方法是动态创建内联SQL表以暂时保存我的id列表.但是,我不知道该怎么做.这可能吗?有没有更好的办法?
谢谢!:)
phi*_*yle 59
您可以使用表值构造函数从SQL Server 2008开始执行此操作.
SELECT * FROM (
VALUES(1, 'red'),
(2, 'orange'),
(5, 'yellow'),
(10, 'green'),
(11, 'blue'),
(12, 'indigo'),
(20, 'violet'))
AS Colors(Id, Value)
Run Code Online (Sandbox Code Playgroud)
更多信息: 表值构造函数
egg*_*yal 26
您可以使用UNION子查询创建"内联表" :
(
SELECT 10 AS id
UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14
-- etc.
) AS inline_table
Run Code Online (Sandbox Code Playgroud)
CREATE TEMPORARY TABLE ids (id INT NOT NULL PRIMARY KEY);
INSERT
INTO ids
VALUES
(10),
(11),
(12),
(13),
(14);
SELECT *
FROM ids
WHERE id NOT IN
(
SELECT id
FROM a
);
Run Code Online (Sandbox Code Playgroud)