SQL从另一个表中存在的一个表中获取重复记录

时间:2018-04-12 22:47:43

标签: sql join group-by

我想从 Table1 获取记录,其中访问号码的记录多于1条记录,但同时此访问号码< / strong>也应出现在表2

示例:

表1

SCRIPTS = $(wildcard *.py)

.PHONY: all
all: $(SCRIPTS)

$(SCRIPTS):
    python $@

p_05.py p_08.py p_09.py: p_01.py
p_09.py: p_03.py
p_10.py: p_05.py
p_11.py: p_08.py

表2

make -B -j4

查询结果应为1000。

这是我到目前为止所要做的,请建议。

Access Number

 - 1000
 - 1000
 - 1000
 - 2000
 - 3000
 - 4000
 - 5000
 - 5000

编辑:

我还需要Table2中的列值

   Access Number    Value

 - 1000            - Test1
 - 2000            - Test2
 - 3000            - Test3

3 个答案:

答案 0 :(得分:1)

这是对问题的原始版本的回答。

我会使用exists

select t1.AccessNumber 
from Table1 t1
where exists (select 1 from table2 t2 where t2.AccessNumber = t1.AccessNumber)
group by t1.AccessNumber
having count(*) > 1;

即使您在table2中有重复项,这也有效。

答案 1 :(得分:0)

- 请尝试此代码

Create table #table1 (Accessnumber int)
Create table #table2 (Accessnumber int)
go
truncate table #table1
insert into #table1 values 
 (1000)
 ,(1000)
 ,(1000)
 ,(2000)
 ,(3000)
 ,(4000)
 ,(5000)
 ,(5000)

 insert into #table2 values 
 (1000)
 ,(2000)
 ,(3000)

 select t1.Accessnumber, count(*)NoOfRecords
 from #table1 t1
 inner join #table2 t2 on t2.Accessnumber = t1.Accessnumber
 group by t1.Accessnumber
 having count(*)>1

答案 2 :(得分:-1)

您可以使用ROW_NUMBER()对Table1查询进行排名,并将Table2与结果相关联。以下是示例查询。

SELECT AccessNumber,RN 
FROM
      ( SELECT a.AccessNumber
              , ROW_NUMBER() OVER(PARTITION BY a.accessNumber, ORDER BY A.accessNumber) AS RN  
        FROM  Table1 a
) O
JOIN  Table2 b on b.AccessNumber = o.AccessNumber
WHERE RN > 1