不在SQL语句中?

7

我是一名有用的助手,可以为您进行文本翻译。

我有一组大约5000个ID的Excel表格,而在表格中有大约30000个ID。如果我在SQL语句中使用"In"条件,我将从Excel中拥有的ID获取大约4300个ID。但是,如果我使用Excel ID的"Not In",我就会得到25000多条记录。我想找出我在表格中缺少的Excel ID。

如何编写这个SQL查询?

例如:Excel IDs are:

 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)

展示你正在使用的SQL。 - Kirk Woll
你能使用Except关键字吗?例如:从table_1(带有Excel ID的表)选择id EXCEPT从table_2(SQL表)选择id。它类似于Oracle中的MINUS关键字。 - Brian
4个回答

8

试试这个:

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

这里有一个SQL Fiddle可以尝试: sqlfiddle.com/#!6/31af5/14

5

您可能正在寻找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);

1
@LenielMacaferi:没有人怀疑这一点。我已经注意到了这些差异。例如,将INSERT INTO @Excel VALUES(7);添加到我的示例数据中,您会发现您的查询现在将返回4条记录(重复“1”),而Except仍然返回3个DISTINCT值。因此,它取决于需求。 - Tim Schmelter
@我自己:当然,重复"1"是个笔误,应该是重复"7" ;) - Tim Schmelter

3

使用在SQL Server Management Studio中找到的“导入数据向导”,将您的Excel文件导入SQL Server。

然后,您可以编写以下查询来查找文件中存在但表中不存在的任何ID:

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

1
你应该将Excel数据移动到SQL Server中的表格中,然后在SQL Server中进行查询。
  select distinct id from Excel where id not in (select your ids from Sqltable)

(显然,从Sqltable中选择您的ids是一个选择,它返回在SQL Server上存在的Ids)。

您可能认为将数据移动到SQL Server很难做,但相反,它非常容易:

1)创建一个表

  CREATE TABLE ExcelIds (Id int)

2) 在Excel中添加一个新列,公式如下:

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

其中XX是引用包含Excel ID的列中的单元格。

3)将“插入”从Excel复制到SSMS或任何你在SQL Server中使用的工具中,并执行它们。

现在你在SQL Server中有了2个表,因此查询它绝对容易。

完成后,只需删除该表即可。

DROP TABLE ExcelIds

注意:我没有在 SQL Server 表上创建键,因为我认为 ID 可能会重复。也不值得为了避免 ExcelIds 中的重复创建更复杂的 SQL 查询来解决这个特定问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接