首页 > 解决方案 > SQL 你如何找到丢失的 ID(不按顺序,或无序)?

问题描述

我的表格中有如下图所示的数据。每个 DocID 都有许多与之关联的 ItemID。例如,我正在尝试查找哪些 DocID 的 ItemID 没有“14000”(图片的右下角。)

请问,我怎样才能得到一个没有与之关联的 ItemID 为“14000”的所有 DocID 的列表?

在此处输入图像描述

这是我迄今为止尝试过的一个版本。

SELECT      
d.DocID
FROM            tableD AS d
WHERE           d.GID = 19
            AND d.TID = 159
            AND 1283 NOT IN (SELECT d.ItemID FROM tableD)
GROUP BY    d.DocID

这是一个临时表,以防万一。

CREATE TABLE #t1 (
DocID   int
,GID    int
,TID    int
,ItemID     int
,Keyword VARCHAR(40)
)

INSERT INTO #t1 
VALUES 
(321654,    28, 1789,   13841,  'Jim'),
(321654,    28, 1789,   13851,  'Smith'),
(321654,    28, 1789,   13861,  'William'),
(321654,    28, 1789,   13871,  '000-00-0000'),
(321654,    28, 1789,   13881,  'SALARY'),
(978312,    28, 1789,   13841,  'Jim'),
(978312,    28, 1789,   13851,  'Smith'),
(978312,    28, 1789,   13861,  'William'),
(978312,    28, 1789,   13871,  '000-00-0000'),
(978312,    28, 1789,   13881,  'SALARY')

谢谢您的帮助。

标签: sqlsql-server

解决方案


使用HAVING

SELECT d.DocID   
FROM tableD AS d
WHERE  d.GID = 19 AND d.TID = 159
GROUP BY d.DocID
HAVING COUNT(CASE WHEN itemid = '14000' THEN 1 END) = 0

推荐阅读