Не в инструкции SQL?

у меня есть набор идентификаторов в excel вокруг 5000 и в таблице у меня есть идентификаторы вокруг 30000. Если я использую условие " In " в SQL statment, я получаю около 4300 идентификаторов из того, что у меня есть идентификаторы в Excel. Но если я использую "не в" с идентификатором Excel. У меня около 25000+ записей. Я просто узнаю, что мне не хватает идентификаторов Excel в таблице.

Как написать sql для этого?

пример: Идентификаторы в Excel

 1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9,
10,

таблица идентификаторов

 1,
 2,
 3,
 4,
 6,
 8,
 9,
11,
12,
14,
15

теперь я хочу get 5,7,10 значения из Excel, которые отсутствуют в таблице?

обновление:

что я делаю

SELECT  [GLID]      
  FROM [tbl_Detail] 
  where datasource = 'China' and  ap_ID  not in (5206896,
5206897,
5206898,
5206899,
5117083,
5143565,
5173361,
5179096,
5179097,
5179150)

4 ответов


вы, вероятно, искали EXCEPT:

SELECT Value 
FROM @Excel 
EXCEPT
SELECT Value 
FROM @Table;

редактировать:

Except будет

  • относиться к NULL по-разному(значения NULL совпадают)
  • применить DISTINCT

в отличие от 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, чтобы попробовать это:sqlfiddle.com#!6 / 31af5/14


импортируйте файл excel в SQL Server с помощью мастера импорта данных, найденного в среде SQL Server Management Studio.

затем вы можете написать следующий запрос, чтобы найти любые идентификаторы, которые находятся в файле, но не в таблице:

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

необходимо переместить данные excel в таблицу в SQL Server, а затем выполнить запрос в SQL Server.

  select distinct id from Excel where id not in (select your ids from Sqltable)

(очевидно, выберите свои идентификаторы из Sqltable-это select, который возвращает идентификаторы, существующие на SQL Server).

вы можете подумать, что перемещение данных в SQL Server трудно сделать, но, наоборот, это очень просто:

1) создать таблицу

  CREATE TABLE ExcelIds (Id int)

2) добавьте новый столбец в excel со следующей формулой:

  ="insert into ExcelIds values(" & XX & ")"

где XX ссылка на ячейку в столбце с кодами в Excel.

3) скопируйте "вставки" из Excel в SSMS или любой инструмент, который вы используете в SQL Server, и выполните их.

теперь у вас есть 2 таблицы в SQL Server, так что запрос абсолютно прост.

когда вы закончите, просто уроните стол

DROP TABLE ExcelIds

примечание: Я не создал ключ в таблице SQL Server, потому что я полагаю, что идентификаторы могут быть повторены. Ни то, ни другое не оправдывает создания более сложного SQL-запрос, чтобы избежать дублирования в ExcelIds для этого специального решения.