简化 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 by
和having
:
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 中的现有查询的主要内容,如果未能解决你的问题,请参考以下文章