如何在不同列上的名字和姓氏的不同行上搜索多个名称?
Posted
技术标签:
【中文标题】如何在不同列上的名字和姓氏的不同行上搜索多个名称?【英文标题】:How to search for multiple names on different rows where first name and last name on different columns? 【发布时间】:2021-01-11 15:19:31 【问题描述】:ID | FIRST_NAME | LAST_NAME |
---|---|---|
1 | SARA | JAMES |
5 | STEVE | STEPHEN |
2 | KAL | LEE |
33 | TONY | KAMPLOO |
3 | SANDRA | BROWN |
23 | HOPE | WHITE |
FIRST_NAME | LAST_NAME |
---|---|
SARA | JAMES |
我有 2 张桌子:
Table1 有 ID、名字和姓氏,如上表。
Table2 只有名字和姓氏。 (表 1 的子集)。
我需要将 table2 中的名称与 table1 中的名称匹配并返回它们的 ID ???这只是一个示例。我的桌子很大,所以我需要一种有效的方法来做到这一点。
【问题讨论】:
问题:如果 (first_name, last_name) 在第一个表中出现多次(具有不同的 id)会发生什么?这种可能性正是您首先需要 id 的原因。在这种情况下,您的查询应该显示什么?如果在第一个表的任何地方都找不到来自第二个表的 (first_name, last_name),查询应该显示什么? 为什么不创建一个 where 条件来检查表 1 和表 2 的名字和姓氏 【参考方案1】:这看起来像一个普通的INNER JOIN
:
select t1.*
from table1 t1
inner join table2 t2
on(t1.first_name = t2.first_name and t1.last_name = t2.last_name)
【讨论】:
【参考方案2】:以下查询将显示第一个表中名字和姓氏出现在第二个表中的所有行。该操作称为半连接。对于第一个表中的给定行,一旦在第二个表中找到匹配项,“连接”就会停止。 (在标准连接中,即使找到匹配项,搜索也会继续,因为连接必须找到 所有 个匹配项 - 即使 我们 知道只有一个匹配项,Oracle 也不'不知道,所以它必须继续搜索。)
select t1.*
from t1
where (first_name, last_name) in (select first_name, last_name from t2);
【讨论】:
以上是关于如何在不同列上的名字和姓氏的不同行上搜索多个名称?的主要内容,如果未能解决你的问题,请参考以下文章