web-dev-qa-db-ja.com

SQLステートメントにありませんか?

私は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)
7
James123

あなたはおそらく探しています 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);
5
Tim Schmelter

これを試して:

SELECT    tableExcel.ID
FROM      tableExcel
WHERE     tableExcel.ID NOT IN(SELECT anotherTable.ID FROM anotherTable)

これがSQL Fiddleこれを試すために: sqlfiddle.com/#!6/31af5/14

8

SQL Server ManagementStudioにあるImportData Wizardを使用して、ExcelファイルをSQLServerにインポートします。

次に、次のクエリを記述して、ファイルにはあるがテーブルにはないIDを見つけることができます。

SELECT id     
FROM imported_table
WHERE id NOT IN (SELECT id FROM db_table)
3

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クエリを作成することも正当化されません。

1
JotaBe