如何删除用于删除SQL中重复项的内部查询的重复项?

时间:2017-07-27 23:28:16

标签: sql sql-server tsql

这是一个SQL Server问题,所以这里是我正在使用的表(注意:列NAME是代码集的名称):

表:代码设置

CODE_SET_ID  | NAME
-------------+-----------
1            | JACKETS
2            | PANTS
3            | SHIRTS

表:代码设置详情

CODE           | DESCRIPTION    | CODE_SET_ID
---------------+----------------+------------
BLUE           | BLUE JACKET    | 1
BLUE           | BLUE JACKET    | 1
GREEN          | GREEN JACKET   | 1
GREEN          | GREEN JACKET   | 1
PURPLE         | PURPLE JACKET  | 1

我写的查询当前发现所有重复的代码集代码以及代码集的代码集也属于。以下查询将返回

JACKETS, BLUE,  2
JACKETS, GREEN, 2

如何围绕以下查询包装另一个查询,以便我只获得JACKETS

SELECT 
    bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*)
FROM 
    CODE_SET_DETAIL as bcsd
INNER JOIN 
    CODE_SET as bcs ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID
GROUP BY 
    bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION
HAVING 
    COUNT(*) > 1

到目前为止,我已尝试使用WHERE EXISTS,但结果集看起来不正确。

2 个答案:

答案 0 :(得分:1)

WITH X (Name, Code, Description, DetailCount) AS (
    SELECT bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION, COUNT(*)
    FROM CODE_SET_DETAIL as bcsd
    INNER JOIN CODE_SET as bcs 
    ON bcsd.CODE_SET_ID = bcs.CODE_SET_ID
    GROUP BY bcs.NAME, bcsd.CODE, bcsd.DESCRIPTION
    HAVING COUNT(*) > 1
)
SELECT DISTINCT Name
FROM X

答案 1 :(得分:0)

如果你真的只想要"夹克"价值,为什么不添加" bcs.name ='夹克' "到你的HAVING子句并跳过整个外部查询,或者我错过了什么?