在Where子句中使用多行标准

时间:2012-09-18 18:13:30

标签: sql-server-2008 tsql

我正在尝试制定一个查询,如果其中一行满足某个条件,我将返回所有具有相同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子句中写这个或者我需要考虑另一种方法吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

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

SELECT [ID], [Parameter]
FROM YourCurrentTable
WHERE [ID] IN (
    SELECT [ID]
    FROM YourCurrentTable
    WHERE [Parameter] = 'Y'
)

答案 1 :(得分: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'
);

答案 2 :(得分: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')