繁体   English   中英

将自我子查询转换为自我联接

[英]Converting a self subquery to a self join

我想知道是否有一种方法可以将self子查询转换为self join这是self子查询

SELECT a, 
       b 
FROM   c AS t1 
WHERE  ( b IN (SELECT b 
               FROM   c AS t2 
               WHERE  ( t1.b = b ) 
                      AND ( t1.e <> e )) ) 

如果您只想查找重复项,则EXIST可能会更快:

SELECT a,b FROM c WHERE EXISTS(SELECT NULL FROM c c2 WHERE c2.b=c.b AND c2.e<>c.e) 

如果您想将每条记录与其重复项连接在一起,但每条记录仅获得一条记录:

select  t1.a
,       t1.b
,       t1.e as t1e
,       t2.e as t2e
from    c as t1
inner join c as t2
on      t1.b = t2.b 
        and t1.e > t2.e

(请注意,我使用了>而不是<>

由于e是主键,另一种解决方法是

SELECT a, 
       b 
FROM   (SELECT a, 
               b, 
               COUNT(*) OVER (PARTITION BY b) AS Cnt 
        FROM   c) T1 
WHERE  Cnt > 1 
SELECT t1.a, t2.b
FROM c as t1
join c as t2 on t1.b=t2.b
WHERE t1.e <> t2.e
select  t1.a
,       t1.b
from    c as t1
join    c as t2
on      t1.b = t2.b 
        and t1.e <> t2.e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM