【问题标题】:Select rows depending on multiple values SQL根据多个值选择行 SQL
【发布时间】:2012-06-01 04:47:17
【问题描述】:

我需要帮助才能用 SQL 编写此代码:

我有一张桌子,我想用字符 A、B 或 C 选择否,但如果我有相同的 A 和 B 否,我只想显示 B,否则我需要显示所有。

伪代码:

SELECT *
  FROM Table1
  WHERE IF EXISTS (Char = A and Char = B)
    THEN Char IN (B, C)
    ELSE Char IN (A, B, C)

例子:

表1

ID  No     Char
1   10     A
2   10     B
4   10     C
5   11     A
6   11     D
7   12     C

我想要结果:

ID  No     Char
2   10     B
4   10     C
5   11     A
7   12     C

我需要什么是否足够清楚?

【问题讨论】:

    标签: select where postgresql-9.1


    【解决方案1】:
    select t1.Id, t1.No, t1.Ch from Table1 t1
    where t1.Ch IN ( 'B', 'C')
    UNION
    select t1.Id, t1.No, t1.Ch from Table1 t1
    where t1.Ch ='A' 
    and not exists (select null from Table1 t2 where t2.No = t1.No  and t2.Ch='B')
    

    我在 Ch 中更改了 Char,因为 Char 可能是保留的关键字...

    用 Sql Server 测试过,但我认为查询是 ANSI SQL

    http://sqlfiddle.com/#!3/f2145/12

    select t1.Id, t1.No, t1.Ch from Table1 t1
    where t1.Ch IN ( 'B', 'C')
    OR (t1.Ch ='A'
    and not exists (select null from Table1 t2 where t2.No = t1.No  and t2.Ch='B'))
    

    【讨论】:

    • 两者都适用于 PostgreSQL,第二个更好。 (为什么不在 sqlfiddle 上使用 PostgreSQL 进行测试?)
    • 因为我对 ANSI SQL 非常确定,但对 PostgreSQL 类型不太确定(错误的论点……我知道,我知道);)
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    相关资源
    最近更新 更多