【问题标题】:Simplify Exist Query in Oracle简化 Oracle 中的现有查询
【发布时间】:2020-10-20 17:20:51
【问题描述】:

如果存在 key_id ECRU 和 MTR 的记录,我如何简化以下查询以返回 field2。

SELECT
    z.field2
FROM
    mytable z
WHERE
        z.key_id = 'ECRU'
    AND EXISTS (
        SELECT
            1
        FROM
            mytable
        WHERE
                key_id = 'MTR'
            AND field2 = z.field2
    )

【问题讨论】:

    标签: sql oracle count subquery having-clause


    【解决方案1】:

    您可以使用group byhaving

    select field2
    from mytable
    where key_id in ('ECRU', 'MTR')
    group by field2
    having count(*) = 2
    

    这假定没有重复的(field2, key_id)。否则,您需要稍微更改having 子句:

    having count(distinct key_id) = 2
    

    【讨论】:

    • 这需要是一个AND操作并且除了指定的键值之外还可以有其他键值。
    • @FurqanShaikh 但在问题中没有提到其他值。这解决了你已经问过的问题。
    • 我认为使用 intersect 可以简化这一点。 SELECT field2 FROM mytable WHERE key_id = 'ECRU' INTERSECT SELECT field2 FROM mytable WHERE key_id = 'MTR' 这会比之前的关联查询在性能上有什么不同吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多