繁体   English   中英

从连接表查询中仅选择重复项

[英]Selecting ONLY Duplicates from a joined tables query

我有以下查询,我试图连接两个与其 ID 匹配的表,以便我可以在“c.code”中获取重复的值。 我已经尝试了很多查询,但没有任何效果。 我的数据库中有 500k 行,通过这个查询我只得到 5k,这是不对的。 我肯定它至少是 200K。 我也尝试使用 Excel,但它无法处理。 有任何想法吗? 提前谢谢大家。

SELECT c.code, c.name as SCT_Name, t.name as SYNONYM_Name, count(c.code)
FROM database.Terms as t
  join database.dbo.Concepts as c on c.ConceptId = t.ConceptId
  where t.TermTypeCode = 'SYNONYM' and t.ConceptTypeCode = 'NAME_Code' and c.retired = '0'
   Group by c.code, c.name, t.name
   HAVING COUNT(c.code) > = 1

Order by c.code
with data as (
    select c.code, c.name as SCT_Name, t.name as SYNONYM_Name
    from database.Terms as t inner join database.dbo.Concepts as c
        on c.ConceptId = t.ConceptId
    where
            t.TermTypeCode = 'SYNONYM'
        and t.ConceptTypeCode = 'NAME_Code'
        and c.retired = '0'
)
select *
    --, (select count(*) from data as d2 where d2.code = data.code) as code_count
    --, count(*) over (partition by code) as code_count
from data
where code in (select code from data group by code having count(*) > 1)
order by code

如果您只想复制 c.code,那么您的 Group By 是错误的(您的 Have 子句也是错误的)。 尝试这个:

SELECT c.code
FROM database.Terms as t
  join database.dbo.Concepts as c on c.ConceptId = t.ConceptId
  where t.TermTypeCode = 'SYNONYM' and t.ConceptTypeCode = 'NAME_Code' and c.retired = '0'
   Group by c.code
   HAVING COUNT(c.code) > 1

这将返回您拥有多个 c.code 值的所有行。

您需要使用 INTERSECT 而不是 JOIN。 基本上你在第一个表上执行选择然后与第二个表相交。 结果是重复的行。

但是,只选择 id 列,否则相交将无法按预期工作。

暂无
暂无

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

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