7

我在 excel 中设置了 5000 左右的 id,在表中我有 30000 左右的 id。如果我在 SQL 语句中使用“In”条件,我从 Excel 中的 id 中得到大约 4300 个 id。但是,如果我使用带有 Excel id 的“不在”。我有大约 25000 多条记录。我只是想知道我在表格中缺少 Excel id。

如何为此编写sql?

示例:Excel ID 是

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

表有 ID

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

现在我想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

4 回答 4

8

试试这个:

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

这是一个 SQL Fiddle 来试试这个:sqlfiddle.com /#!6/31af5/14

于 2012-04-12T21:54:11.833 回答
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);
于 2012-04-12T21:58:41.953 回答
3

使用 SQL Server Management Studio 中的导入数据向导将您的 Excel 文件导入 SQL Server。

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

SELECT id     
FROM imported_table
WHERE id NOT IN (SELECT id FROM db_table)
于 2012-04-12T23:29:20.133 回答
1

您应该将 excel 数据移动到 SQL Server 中的表中,然后在 SQL Server 中执行查询。

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

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

您可能认为将数据移动到 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 查询也是不合理的。

于 2012-04-12T22:11:53.493 回答