加入 Fragment CTE 来构建我们合适的表

Posted

技术标签:

【中文标题】加入 Fragment CTE 来构建我们合适的表【英文标题】:Join Fragment CTE to construct our proper table 【发布时间】:2020-09-06 23:41:32 【问题描述】:

这是我的查询

with cte as ( 
select  mail 
from dbo.reseau

where   mail  in       
 ( select   mail   from dbo.reseau
 group by mail
 having count(1) > 1
  ) ) 
  select * from (
  
  select  trig 
from dbo.reseau

where   trig  in      
 ( select   trig   from dbo.reseau
 group by trig
 having count(1) > 1
  ))t
  select * from 
  ( 
  select nom from reseau 
  where nom  in (
( select   nom   from dbo.reseau
 group by nom
 having count(1) > 1
  ) )  )c
    
  select * from  (
 select prenom from reseau 
  where prenom   in (
( select   prenom    from dbo.reseau
 group by prenom 
 having count(1) > 1)))r

我有 4 列,我写了这个 CTE 来显示重复的数据。我的查询分别显示它们。我想加入他们。我该怎么做?

【问题讨论】:

没有样本数据和预期输出就不可能知道。 【参考方案1】:

如果您想要任何列包含重复值的行,您可以多次使用窗口函数:

select *
from (
    select 
        r.*,
        count(*) over(partition by mail) cnt_mail,
        count(*) over(partition by trig) cnt_trig,
        count(*) over(partition by nom) cnt_nom,
        count(*) over(partition by prenom) cnt_prenom
    from reseau
) t
where cnt_mail > 1 or cnt_trig > 1 and cnt_nom > 1 end cnt_prenom > 1

where 子句可以简化为:

where cnt_email + cnt_trig + cnt_nom + cnt_prenom > 4

【讨论】:

以上是关于加入 Fragment CTE 来构建我们合适的表的主要内容,如果未能解决你的问题,请参考以下文章

表数据子集上的递归 CTE

如何在 SQL Server 的表值函数中使用 CTE 语句

Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

Postgres - 使用 CTE 的 id 列的唯一值,与 GROUP BY 一起加入

递归 CTE 导致缓慢和索引扫描

CTE内部有多个子查询