【问题标题】:SQL conditional filterSQL 条件过滤器
【发布时间】:2017-06-13 18:54:31
【问题描述】:

我有以下格式的数据:

ID  Val
1   abc
1   xyz
2   abc
3   abc
3   pqr
3   xyz
4   abc

现在,我想要除了“abc”之外没有任何其他值的 ID。这意味着我只需要 ID 2,4。 1,3 具有 abc 以及其他 2 个值。输出应该是这样的

ID  Val
2   abc
4   abc

我试过了:

SELECT ID, Val from
Table
WHERE Val = 'abc'
AND Val != 'xyz'
AND Val != 'pqr'

这给了我所有的 ID。 有什么想法吗? 请帮忙!!

【问题讨论】:

    标签: sql postgresql filter subquery conditional


    【解决方案1】:

    我会简单地计算子查询中满足此特定条件的行。

    SELECT ID, Val from
    Table T1
    WHERE T1.Val = 'abc'
    AND 1 = (SELECT COUNT(ID) FROM Table T2 WHERE T2.ID = T1.ID)
    

    或者,或者

    SELECT ID, Val from
    Table T1
    WHERE T1.Val = 'abc'
    AND NOT EXISTS (SELECT * FROM Table T2 WHERE T2.ID = T1.ID AND T2.Value != 'abc')
    

    【讨论】:

    • 为什么要用两张表?问题中没有提到两个表中的数据。
    • 是同一张表(Table)加入的。这就是诀窍。试试吧。
    • 不错的方法..这应该是公认的答案:)
    • 这简直太完美了!!!非常感谢 Grzegorz Górkiewicz !只是好奇,您有什么资源可以推荐来提高 SQL 技能吗??
    • 保持优雅! :D 没有人可以否认...!!非常感谢 ! :) 会跟上进度! :)
    【解决方案2】:

    我会用一个简单的group byhaving 来做到这一点:

    select id
    from t
    group by id
    having min(val) = max(val) and min(val) = 'abc';
    

    这对我来说似乎是最简单的方法。

    【讨论】:

      猜你喜欢
      • 2018-09-15
      • 2014-12-21
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      • 2021-06-21
      • 2018-07-31
      相关资源
      最近更新 更多