私はExcelで約5000のIDのセットを持っており、テーブルでは約30000のIDを持っています。SQLステートメントで「In」条件を使用すると、Excelで持っているIDから約4300のIDを取得します。しかし、ExcelIDで「NotIn」を使用した場合。私は約25000以上のレコードを取得しています。テーブルにExcelIDがないことがわかりました。
このためのSQLを書く方法は?
例:ExcelIDは
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
テーブルにはIDがあります
1,
2,
3,
4,
6,
8,
9,
11,
12,
14,
15
テーブルがないExcelから5,7,10
値を取得したいですか?
私がしているのは
SELECT [GLID]
FROM [tbl_Detail]
where datasource = 'China' and ap_ID not in (5206896,
5206897,
5206898,
5206899,
5117083,
5143565,
5173361,
5179096,
5179097,
5179150)
あなたはおそらく探しています EXCEPT
:
SELECT Value
FROM @Excel
EXCEPT
SELECT Value
FROM @Table;
編集:
Except
は
NOT IN
とは異なり
サンプルデータは次のとおりです。
declare @Excel Table(Value int);
INSERT INTO @Excel VALUES(1);
INSERT INTO @Excel VALUES(2);
INSERT INTO @Excel VALUES(3);
INSERT INTO @Excel VALUES(4);
INSERT INTO @Excel VALUES(5);
INSERT INTO @Excel VALUES(6);
INSERT INTO @Excel VALUES(7);
INSERT INTO @Excel VALUES(8);
INSERT INTO @Excel VALUES(9);
INSERT INTO @Excel VALUES(10);
declare @Table Table(Value int);
INSERT INTO @Table VALUES(1);
INSERT INTO @Table VALUES(2);
INSERT INTO @Table VALUES(3);
INSERT INTO @Table VALUES(4);
INSERT INTO @Table VALUES(6);
INSERT INTO @Table VALUES(8);
INSERT INTO @Table VALUES(9);
INSERT INTO @Table VALUES(11);
INSERT INTO @Table VALUES(12);
INSERT INTO @Table VALUES(14);
INSERT INTO @Table VALUES(15);
これを試して:
SELECT tableExcel.ID
FROM tableExcel
WHERE tableExcel.ID NOT IN(SELECT anotherTable.ID FROM anotherTable)
これがSQL Fiddleこれを試すために: sqlfiddle.com/#!6/31af5/14
SQL Server ManagementStudioにあるImportData Wizardを使用して、ExcelファイルをSQLServerにインポートします。
次に、次のクエリを記述して、ファイルにはあるがテーブルにはないIDを見つけることができます。
SELECT id
FROM imported_table
WHERE id NOT IN (SELECT id FROM db_table)
ExcelデータをSQLServerのテーブルに移動してから、SQLServerでクエリを実行する必要があります。
select distinct id from Excel where id not in (select your ids from Sqltable)
(明らかに、SqltableからIDを選択するのは、SQL Serverに存在するIDを返す選択です)。
データをSQLServerに移動するのは難しいと思うかもしれませんが、それどころか、非常に簡単です。
1)テーブルを作成する
CREATE TABLE ExcelIds (Id int)
2)次の式を使用してExcelに新しい列を追加します。
="insert into ExcelIds values(" & XX & ")"
ここで、XXはExcelIDを持つ列のセルへの参照です。
3)「挿入」をExcelからSSMSまたはSQLServerで使用しているツールにコピーして実行します。
これで、SQL Serverに2つのテーブルがあるので、クエリを実行するのは非常に簡単です。
終わったら、テーブルをドロップするだけです
DROP TABLE ExcelIds
注:IDを繰り返すことができると思われるため、SQLServerテーブルにキーを作成しませんでした。このアドホックソリューションのExcelIdでの重複を避けるために、より複雑なSQLクエリを作成することも正当化されません。