Не в инструкции 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 для этого специального решения.