以下を想定しましょう:
テーブルA
id | value
----------
1 | red
2 | orange
5 | yellow
10 | green
11 | blue
12 | Indigo
20 | Violet
このテーブルでIDを検索するために使用できるID(10、11、12、13、14)のリストがあります。このIDのリストは、私のフロントエンドで生成されます。
純粋にSQLを使用して、このリストからIDを選択する必要があります(10、11、12、13、14)。これには、テーブルAのエントリ(「id」列で結合)がありません。結果は、idの13と14の結果セットになります。
SQLのみを使用してこれをどのように達成できますか? (また、可能な場合はストアドプロシージャの使用を避けたい)
私が考えることができる唯一のアプローチは、IDのリストを一時的に保持するためにインラインSQLテーブルをその場で作成するものです。ただし、これを行う方法はわかりません。これは可能ですか?もっと良い方法はありますか?
ありがとう! :)
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
SQL Server 2008以降では、テーブル値コンストラクタを使用してこれを行うことができます。
SELECT * FROM (
VALUES(1, 'red'),
(2, 'orange'),
(5, 'yellow'),
(10, 'green'),
(11, 'blue'),
(12, 'Indigo'),
(20, 'Violet'))
AS Colors(Id, Value)
詳細はこちら: Table Value Constructor
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
);
create table B (id int)
insert into B values (10),(11),(12),(13),(14)
select *
from B
left join A
on A.id=B.id
where A.id is null
drop table B