我有一个SQL Server查询,它使用链接服务器连接从Oracle 8i服务器获取数据。我的问题完全在于Oracle SQL。
有一个StyleSizes表。一种样式可以具有与其相关联的一种或多种尺寸。我需要找到任何一个具有多个Size_CD的Style_CD。这可以通过GROUP BY和HAVING来实现。但我只需要一种这样的风格。表的数量是如此之大,我不能等到查询执行完成 - 所以我只需要一种风格。
如何在Oracle中应用GROUP BY和HAVING子句后快速获取一条记录?
SELECT STYLE_CD
FROM OPENQUERY(LinkedORAServer,
'SELECT STYLE_CD
FROM DA.StyleSize M
GROUP BY STYLE_CD
HAVING COUNT(SIZE_CD) > 1
')
进一步阅读
答案 0 :(得分:2)
你应该使用类似于MySQL限制和SQL-SERVER顶部的ROWNUM:
SELECT STYLE_CD
FROM OPENQUERY(LinkedORAServer,
'SELECT STYLE_CD FROM(SELECT STYLE_CD
FROM DA.StyleSize M
GROUP BY STYLE_CD
HAVING COUNT(SIZE_CD) > 1)
WHERE rownum = 1
')
答案 1 :(得分:2)
SELECT * FROM (SELECT SIZE_CD, COUNT(STYLE_CD) OVER (PARTITION BY STYLE_CD) CNT FROM STYLESIZE) WHERE CNT > 1
答案 2 :(得分:2)
如果您想要一种具有多种尺寸的样式,请快速使用exists
:
select m.*
from da.stylesize m
where exists (select 1 from da.stylesize m2 where m2.style_cd = m.style_cd and m2.size_cd <> m.size_cd) and
rownum = 1;
然后,您要确保在da.stylesize(style_cd, size_cd)
上有索引。
使用此查询,您甚至不需要进行聚合,这应该是一个很大的节省。
答案 3 :(得分:1)
SELECT STYLE_CD
FROM OPENQUERY(LinkedORAServer,
'select VAL from (
select VAL,COUNT(*) from SANDEEP24FEB2016_2 group by VAL having COUNT(*)>1
) where rownum=1
') ;