简化 Oracle 中的现有查询

Posted

技术标签:

【中文标题】简化 Oracle 中的现有查询【英文标题】:Simplify Exist Query in 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
    )

【问题讨论】:

【参考方案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' 这会比之前的关联查询在性能上有什么不同吗?

以上是关于简化 Oracle 中的现有查询的主要内容,如果未能解决你的问题,请参考以下文章

mysql语句的简化:from中的临时表作为where中的条件

简化查询以用作 winform rdlc 报告中的数据集

简化冗余左连接

oracle中的视图序列索引

Oracle 视图

oracle 之 using 使用