表设计:
First_Name Last_name
有几条记录具有相同的名字但姓氏不同。我需要找到所有具有相同名字和已定义姓氏列表的记录。
例如:
First_Name Last_name
John Pohn
John Qohn
John Rohn
Jack Rohn
Jack Pohn
Sam Pohn
Sam Rohn
Sam Qohn
姓氏名单:Pohn和Qohn
因此我的查询应该只选择这些记录
John Pohn
John Qohn
Sam Pohn
Sam Qohn
答案 0 :(得分:3)
很难说出你想要的东西 - 这意味着对于任何出现不止一次的名字,你想要显示所有匹配记录的名字和姓氏吗?如果是这样,您可以使用分析函数,例如:
select first_name, last_name
from (
select first_name, last_name,
count() over (partition by first_name) as cnt
)
where cnt > 1;
内部查询为每一行添加一个虚拟列,显示第一个名称在整个数据集中出现的次数;外部查询然后筛选出只出现一次的任何内容。一般情况下,这比自联接更好,因为你只打了一次表。
如果您只对特定的姓氏感兴趣,可以在任一级别添加一个过滤器(根据DCookie的答案),结果略有不同 - 取决于您是否希望计数中包含所有姓氏,或仅列表中的特定内容。
当然,如果这是家庭作业而你刚刚学习了自我加入,那么这可能是你现在应该采用的方式 - 虽然我不喜欢教一些次优的东西,除非它告诉你为什么会这样。如果是家庭作业,请查看您可以获得多远,然后将您的尝试和任何错误等添加到问题中。