0

我正在尝试制定一个查询,如果其中一行满足特定条件,我将允许我返回具有相同 ID 号的所有行。我当前的表和所需的表如下:

当前表:

ID  Parameter
1   x
1   x
1   y
1   x
2   x
2   x
2   x
3   y
3   y
3   x
4   x
4   x
4   x

期望的结果:

ID  Parameter
1   x
1   x
1   y
1   x
3   y
3   y
3   x

在这个例子中,我感兴趣的参数是“y”。由于 y 至少出现在 ID 1 和 3 的行中,因此 ID 1 和 3 的所有行数据都被选中,而其余的被过滤掉。有没有办法在 where 子句中写这个,还是我需要考虑另一种方法?

谢谢!

4

3 回答 3

2

试试这个; 它将选择任何 ID 至少有一条记录的所有记录Parameter = 'Y'

SELECT [ID], [Parameter]
FROM YourCurrentTable
WHERE [ID] IN (
    SELECT [ID]
    FROM YourCurrentTable
    WHERE [Parameter] = 'Y'
)
于 2012-09-18T18:17:53.727 回答
1

出于性能目的,您应该更喜欢使用 EXISTS 而不是 IN。请参阅此线程以了解 EXISTS 和 IN 的差异:SQL Server IN vs. EXISTS Performance

select id, parameter
from current_table c1
where exists (
    select 1
    from current_table c2
    where c2.id = c1.id
    parameter = 'y'
);
于 2012-09-18T18:24:56.760 回答
0

这是你可以做到这一点的一种方法

    create table tret (i int, j char)
    insert into tret values 
    (1,   'x'),
    (1,   'x'),
    (1,   'y'),
    (1,   'x'),
    (2,   'x'),
    (2,   'x'),
    (2,   'x'),
    (3,   'y'),
    (3,   'y'),
    (3,   'x'),
    (4,   'x'),
    (4,   'x'),
    (4,   'x')


    select * from tret where i in (select i from tret where j = 'y')
于 2012-09-18T18:21:10.987 回答