Sql-Server

辨識哪些值與表行不匹配

  • November 7, 2018

我希望能夠輕鬆檢查查詢中提供的那些唯一標識符在表中不存在。

為了更好地解釋,這就是我現在要做的,檢查表中不存在列表“1、2、3、4”的哪些 ID:

  1. SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4'),假設該表不包含 ID 為 2 的行。
  2. 將結果轉儲到 Excel
  3. 在搜尋結果列表中的每個列表值的原始列表上執行 VLOOKUP。
  4. 任何導致 的 VLOOKUP 都#N/A位於表中未出現的值上。

我認為必須有更好的方法來做到這一點。理想情況下,我正在尋找類似的東西

要檢查的列表 -> 查詢要檢查的表 -> 列表中的成員不在表中

使用EXCEPT

SELECT * FROM
 (values (1),(2),(3),(4)) as T(ID)
EXCEPT
SELECT ID 
FROM [TABLE];

請參閱SqlFiddle


構造values函式僅適用於 SQL Server 2008 或更高版本。對於 2005 年,使用

SELECT 'value'
UNION SELECT 'value'

this SO answer中所述。

我會建立一個包含您正在搜尋的 ID 的表變數或臨時表……然後使用 Remus 的解決方案,減去 2008 年的語法糖:

declare @t table (ID int)
insert into @t values (1)
insert into @t values (2)
insert into @t values (3)
insert into @t values (4)
insert into @t values (5)

select ID from @t
except
select ID
from [Table];

引用自:https://dba.stackexchange.com/questions/37627