我有四列,2列可以说表PersonalInfo中的FIRST_NAME和LAST_NAME以及表AddressDetails中的其他2列ADD1和ADD2。现在我要做的是我想知道考虑所有4列的每行重复记录的计数。我怎么能这样做?
到目前为止,我有两种方法: 1.我迭代每个响应并与剩余的响应进行比较。 2.做一些查询。
我知道第一种情况是最糟糕的选择,因为它需要花费很多时间。我可以用查询做些什么吗?
我搜索并发现了这个:
SELECT LAST_NAME, count(LAST_NAME) FROM SchemaName.PersonalInfo S GROUP by LAST_NAME;
,基本适用于单列,而不适用于多列。
我该怎么办?请建议。
答案 0 :(得分:0)
按所有cols分组,而不仅仅是姓氏。
工作小提琴:http://sqlfiddle.com/#!9/a76e7e/3
SELECT P.fname,P.lname,A.add1,A.add2, count(*)
FROM PersonalInfo P, AddressDetails A
Where P.id = A.id
GROUP by P.fname,P.lname,A.add1,A.add2
having count(*) > 1;
如上例所示,在id上加入表格。
答案 1 :(得分:0)
我认为你的桌面PersonalInfo有一个主键,而AddressDetails是这个主键上的一个forey键吗?
select t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2, count(*) NbPossibility
from PersonalInfo t1 inner join AddressDetails t2
on t1.idPersonalInfo=t2.idPersonalInfo
group by t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2
having count(*)>1
你没有加入这张桌子的钥匙(正常):
select t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2, count(*) NbPossibility
from PersonalInfo t1 cross join AddressDetails t2
group by t1.FIRST_NAME , t1.LAST_NAME, t2.ADD1 , t2.ADD2
having count(*)>1