SQL-选择具有重复信息的多个列,以及一些具有唯一信息的列
我需要生成一个查询,该查询将使用以下内容提取所有记录:SQL-选择具有重复信息的多个列,以及一些具有唯一信息的列,sql,select,db2,Sql,Select,Db2,我需要生成一个查询,该查询将使用以下内容提取所有记录: 同名 同姓 相同的出生日期 相同的客户ID(客户ID为“1011”) 不同的成员ID 注意:我有一个拥有数百万条记录的大型数据库,只要我提供了多个子查询,就需要几个小时才能提供第一个数据样本。(也许我的子查询不正确) 我已经尝试过一步一步地构建这个查询,但它仍然无法按照我需要的方式进行过滤 Select ta.Member_ID, ta.First_Name, ta.LAST_NAME, ta.date_of_birth, ta.cli
- 同名
- 同姓
- 相同的出生日期
- 相同的客户ID(客户ID为“1011”)
- 不同的成员ID
Select
ta.Member_ID,
ta.First_Name,
ta.LAST_NAME,
ta.date_of_birth,
ta.client_id,
From TestTable ta
WHERE client_id = '1011'
AND
((SELECT COUNT(*)
FROM TestTable ta2
WHERE ta.date_of_birth=ta2.date_of_birth
AND ta.FIRST_NAME=ta2.FIRST_NAME
AND ta.LAST_NAME=ta2.LAST_NAME)>1
我甚至没有选择不同的成员ID,但这个查询仍然会提取不需要遵循这些参数的记录。
请帮忙。
以下是示例数据,突出显示的是我希望能够获得的数据对:
一般来说,不要使用相关子查询,除非您必须这样做。当为外部查询的每一行运行子查询时,性能会受到严重影响。一个简单的连接应该可以工作:
Select
ta.Member_ID,
ta.First_Name,
ta.LAST_NAME,
ta.date_of_birth,
ta.client_id
From TestTable ta JOIN TestTable ta2
WHERE ta.client_id = '1011' AND ta.Member_ID <> ta2.Member_ID
ON ta.date_of_birth=ta2.date_of_birth
AND ta.FIRST_NAME=ta2.FIRST_NAME
AND ta.LAST_NAME=ta2.LAST_NAME
AND ta.client_id=ta2.client_id
选择
电讯局长,
ta.名字,
ta.姓,
ta.出生日期,
客户识别码
从TestTable ta连接TestTable ta2
其中ta.client\u id='1011'和ta.Member\u id ta2.Member\u id
ta.出生日期=ta2.出生日期
和ta.FIRST_NAME=ta2.FIRST_NAME
和ta.LAST_NAME=ta2.LAST_NAME
和ta.client\u id=ta2.client\u id
只需使用窗口功能:
SELECT ta.Member_ID, ta.First_Name, ta.LAST_NAME, ta.date_of_birth,
ta.client_id
FROM (SELECT ta.*,
COUNT(*) OVER (PARTITION BY FIRST_NAME, LAST_NAME, date_of_birth) as cnt
FROM TestTable ta
) ta
WHERE client_id = '1011' AND cnt > 1;
如果您的唯一目的是查找具有相同详细信息但不同成员ID的记录,请使用基本分组依据筛选数据。这并不像连接两个表那样昂贵
Select
ta.First_Name,
ta.LAST_NAME,
ta.date_of_birth,
ta.client_id
From TestTable ta
group by
ta.First_Name,
ta.LAST_NAME,
ta.date_of_birth,
ta.client_id
having count(distinct Member_ID) > 1
它确实返回了所有具有相同FName、LName和DOB的记录(只花了几个小时就提取了100多万条记录)。现在我如何向它添加一个条件?我需要相同的FName、LName和DOB,但不同的“成员ID”?非常感谢,非常好的帮助我不知道“不同的会员Id”是什么意思。但是,您可以提取外部查询中的所有列。此查询不会仅返回具有相同FName、LName和DOB的记录。也并没有真正区分MemberID,结果非常类似于我写的,但更快-工作速度快。谢谢。它生成了一个错误:GROUP BY子句中未指定以SELECT子句、HAVING子句或ORDER BY子句中指定的“Member_ID”开头的表达式,或者该表达式位于SELECT子句、HAVING子句或ORDER BY子句中,并且具有列函数,并且未指定GROUP BY子句。您忘记了表的ta别名,我已经改正了;)