gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:07:16 24 4
gpt4 key购买 nike

我有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com