SQL查询帮助:获取具有相同名字且姓氏与已定义列表匹配的所有行

SQL查询帮助:获取具有相同名字且姓氏与已定义列表匹配的所有行,sql,oracle,duplicates,records,Sql,Oracle,Duplicates,Records,表格设计: First_Name Last_name 有几条记录的名字相同,但姓氏不同。我需要找到所有的记录,其中有相同的名字和一个定义的姓氏列表 例如: First_Name Last_name John Pohn John Qohn John Rohn Jack Rohn Jack Pohn Sam Pohn Sam Rohn Sam Qohn 姓氏列表:波恩和库恩 因此,我的查询应该只

表格设计:

First_Name Last_name
有几条记录的名字相同,但姓氏不同。我需要找到所有的记录,其中有相同的名字和一个定义的姓氏列表

例如:

First_Name Last_name
John       Pohn
John       Qohn
John       Rohn
Jack       Rohn
Jack       Pohn
Sam        Pohn
Sam        Rohn
Sam        Qohn
姓氏列表:波恩和库恩

因此,我的查询应该只选择这些记录

John Pohn
John Qohn
Sam  Pohn
Sam Qohn

很难说您在这里想要什么-是否意味着对于任何出现多次的名字,您希望显示所有匹配记录的名字和姓氏?如果是这样,您可以使用分析函数,例如:

select first_name, last_name
from (
    select first_name, last_name,
        count() over (partition by first_name) as cnt
)
where cnt > 1;
内部查询向每行添加一个虚拟列,显示名字在整个数据集中出现的次数;然后,外部查询过滤掉只出现一次的查询。总的来说,这比自联接好,因为您只需点击表一次

如果您也只对特定的姓氏感兴趣,您可以在任一级别为这些姓氏添加一个过滤器(根据DCookie的回答),结果略有不同-这取决于您是希望将所有姓氏包括在计数中,还是仅将特定姓氏包括在列表中



当然,如果这是一个家庭作业,而你刚刚学习了自我连接,那么这可能是你现在应该采取的方式——尽管我不喜欢教一些次优的东西,除非是为了告诉你为什么会这样。如果是作业,看看你能走多远,然后将你的尝试和任何错误等添加到问题中。

很难说清楚你想在这里做什么-是否意味着对于任何出现多次的名字,你想同时显示所有匹配记录的名字和姓氏?如果是这样,您可以使用分析函数,例如:

select first_name, last_name
from (
    select first_name, last_name,
        count() over (partition by first_name) as cnt
)
where cnt > 1;
内部查询向每行添加一个虚拟列,显示名字在整个数据集中出现的次数;然后,外部查询过滤掉只出现一次的查询。总的来说,这比自联接好,因为您只需点击表一次

如果您也只对特定的姓氏感兴趣,您可以在任一级别为这些姓氏添加一个过滤器(根据DCookie的回答),结果略有不同-这取决于您是希望将所有姓氏包括在计数中,还是仅将特定姓氏包括在列表中



当然,如果这是一个家庭作业,而你刚刚学习了自我连接,那么这可能是你现在应该采取的方式——尽管我不喜欢教一些次优的东西,除非是为了告诉你为什么会这样。如果是作业,看看你能走多远,然后在问题中添加你的尝试和任何错误等。

@Justin你的编辑完全改变了问题。。。我不认为这是好奇的意思,我认为他想找到所有姓“约翰”的人*ohn@alfasin-什么意思?贾斯汀只是格式化了已经存在的内容,没有其他改变?@AlexPoole我的理解是,他只想要姓为“*ohn”的“John”。他的问题最初的格式看起来不像是在找“山姆”和“杰克”。但最好让好奇的人解释一下——也许是我不明白他的意思。@Justin你的编辑完全改变了问题。。。我不认为这是好奇的意思,我认为他想找到所有姓“约翰”的人*ohn@alfasin-什么意思?贾斯汀只是格式化了已经存在的内容,没有其他改变?@AlexPoole我的理解是,他只想要姓为“*ohn”的“John”。他的问题最初的格式看起来不像是在找“山姆”和“杰克”。但最好让好奇的人解释一下——也许是我不明白他的意思。一个比我更好的答案;-)比我的答案更好;-)