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行,我不知道我做错了什么
答案 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