mysql - sql连接两个表并从一个表中获取基于另一个表的唯一值

标签 mysql sql

我有以下 table1,其中有一个 id可以出现多次,每次都有一个独特的 name name 也一样, 它可能会出现多次并且每次都有不同的 id .

id  name
---------
A2  B6
A3  B2
A3  B400
A5  B100
A7  B200
A8  B300
A8  B2
A8  B3

这里是 table2,其中所有 id table1 中的 s 存在,但不是所有的 name秒。每个 id有一个 surname .

id  name    surname
-------------------
A1          Lastname1
A2          Lastname2
A3  B1      Lastname3
A4          Lastname4
A5  B2      Lastname5
A6          Lastname6
A7  B3      Lastname7
A8  B4      Lastname8
A9          Lastname9
A10 B6      Lastname10

查询结果如下: - 第一列:所有独特的列表 id来自 table1 加上所有 name 的列表table1 中的 s 在 name 中找不到table2 的列。 - 第二列:surname id 中的每个元素结果表的列取自 table2,所有 id table1 中的 s 具有相应的姓氏,但如果 nametable1中找不到table2,那么我们把相同的name作为姓氏。 - 第三列:如果idnametable1table2 中找到,则状态将为 FOUND,但是如果 name来自 table1 未找到,它将得到 NOT FOUND

id      surname     status
---------------------------
A2      Lastname2   FOUND
A3      Lastname3   FOUND   
A5      Lastname5   FOUND   
A7      Lastname7   FOUND   
A8      Lastname8   FOUND   
A10     Lastname10  FOUND   
B100    B100        NOT FOUND
B200    B200        NOT FOUND
B300    B300        NOT FOUND
B400    B400        NOT FOUND

最佳答案

这称为左连接。以下是如何将其应用于您的问题:

SELECT table1.id, coalesce(table2.surname, table1.name) as surname,
      case when table2.id is null then 'not found' else 'found' end as status
FROM table1
LEFT JOIN table2 on table1.id = table2.id and table1.name = table2.name 

正如@ebyrob 所指出的,您不希望在第一列中出现不匹配的 ID:

SELECT 
   case when table2.id is null then table1.name else table1.id end as id,
   coalesce(table2.surname, table1.name) as surname,
   case when table2.id is null then 'not found' else 'found' end as status
FROM table1
LEFT JOIN table2 on table1.id = table2.id and table1.name = table2.name 

关于mysql - sql连接两个表并从一个表中获取基于另一个表的唯一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41228450/

相关文章:

mysql - SQL - 根据 YTD 数字计算出 MTD 数字

mysql - 如何获取 MySQL 中逗号分隔字段的最大值?

MySQL 查询 : Find column where key like "Y" then use another columns unique ID to update a third column with something?

iphone - 如何将 xls 文件数据导入 sqlite3

mysql选择不在时间段内的行(由两列定义)

sql - 选择表中最后插入的 `n` 记录 - oracle

mysql - 如何在不丢失列数据的情况下更改 MySQL 表的列位置?

java - 从 Java 调用 PHP

sql - 多种选择的数据库设计

mysql - MySQL 升级到 5.7 版本后 Asterisk Realtime 不工作