我在 MySQL 数据库中有几个表
EID Name
1 Title A
2 Title B
3 Title C
LID EID Location Address Order
1 1 Office NY 1
2 1 Home IL 2
3 2 Office CA 1
4 3 Home NJ 2
我有以上 2 个表(员工和位置)。我想知道每个以办公室为首选的员工的位置,如果“办公室”不存在,则需要“家庭”位置。 order 列定义了所需内容的顺序/优先级。
这里是需要的输出
EID LID Name Location Address
1 1 Title A Office NY
2 3 Title B Office CA
3 4 Title C Home NJ
最佳答案
下面查询的第一个连接只是连接 Employee
和 Location
表,但请注意,它会产生 所有 来自的记录>Location
正在加入。以下查询的关键部分是子查询的第二个 INNER JOIN
。此子查询确定每个员工 ID 的最小(即最高优先级)顺序。然后,这用于丢弃第一个连接中不是最高优先级的记录。
SELECT t1.EID,
t2.LID,
t1.Name,
t2.Location,
t2.Address
FROM Employee t1
INNER JOIN Location t2
ON t1.EID = t2.EID
INNER JOIN
(
SELECT EID, MIN(`Order`) AS min_order
FROM Location
GROUP BY EID
) t3
ON t2.EID = t3.EID AND
t2.Order = t3.min_order
另一个注意事项:不要将您的列命名为Order
,这是一个MySQL 关键字。为了让我的查询正常工作,我不得不将其放在反引号中,这至少可以说很不方便,而且可能容易出错。
此处演示:
SQLFiddle
关于MySQL join 以使用顺序/优先级获取单行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42016820/