【发布时间】:2016-12-19 18:02:07
【问题描述】:
我有以下 table1,其中 id 可能出现多次,每次都有一个唯一的 name 和 name 相同,它可能出现多次,每个时间与不同的id。
id name
---------
A2 B6
A3 B2
A3 B400
A5 B100
A7 B200
A8 B300
A8 B2
A8 B3
这是 table2,其中存在来自 table1 的所有 ids,但不是所有 names。每个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
查询结果如下:
- 第一列:table1 中所有唯一 ids 的列表加上 table1 中未在name table2 的列。
- 第二列:取自table2的结果表id列中每个元素的surname,所有来自table1的ids都有一个对应的姓氏,但是如果 table2 中没有找到 table1 中的name,那么我们将相同的name 放入姓氏。
- 第三列:如果在 table2 中找到来自 table1 的 id 或 name,则状态将为 FOUND,但是如果未找到 table1 中的 name,它将得到 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
【问题讨论】:
-
你可以使用
left join -
这一行没有意义——
A2 Lastname2 FOUND——“允许”这一行被发现的规则是什么? -
这有点令人费解。您可能希望首先避免使用列描述符
id。我们大多数人会认为id是独一无二的,而AUTO_INCREMENT。接下来,为表提供关于它们所代表内容的描述性名称,而不是“table1”“table2”。即使使用名称作为名称也可能有点混乱。 -
@Hogan 第 1 行是“找到”的,因为表 1 中的 ID 或 NAME(表 1 的第 1 行第 1 列是 A2)是“在表 2 中找到的”(在表 2 的 id 列中某处)。