连接相同的表获取某些ID的重复行

时间:2017-02-13 07:31:34

标签: sql sql-server-2008

I have a table test 

ID       Status     

1       A     
1       C     
2       A   
3       A   
4       A  
4       C  
4       A  
4       C  
5       A


Desire Output

ID      Status  
1       A   
1       C     
4       A   
4       C   
4       A   
4       C

`     我试过这个

 select * from test 
join
    (
        select id from test t
        where status='c'
    ) b
on b.id=test.id

它适用于ID = 1,其中它给了我2行,但是对于id = 4,它给了我8行,我不知道我做错了什么

4 个答案:

答案 0 :(得分:2)

您的查询唯一的问题是子查询当前将返回具有C状态的多个 ID。这里的一个选项是在子查询中使用GROUP BY ID来限制每个ID只出现一次。

SELECT t1.ID, t1.Status
FROM test t1
INNER JOIN
(
    SELECT ID
    FROM test
    WHERE Status = 'C'
    GROUP BY ID
) t2
    ON t1.ID = t2.ID

答案 1 :(得分:1)

你得到8行,因为你的ID 4有更多'Cs'然后只有1

如果你刚开始

    select id from test t
    where status='c'

你会得到

    1, 4, 4

结果

所以在你的内心选择尝试

    select DISTINCT id from test t
    where status='c'

答案 2 :(得分:-1)

如果您想获得所需的输出,请尝试使用count:

 SELECT 
    t1.ID, t1.Status
 FROM 
    test t1
 GROUP BY
    t1.ID, t1.Status
 Having
    COUNT(t1.ID) > 1

答案 3 :(得分:-1)

如果在内部SELECT中使用count,则无需过滤任何特定状态:

SELECT t1.ID, t1.Status
FROM [test] t1
INNER JOIN
(
    SELECT ID
    FROM [test]
    GROUP BY ID
    HAVING COUNT(*) > 1
) t2
    ON t1.ID = t2.ID