[英]How to run two LEFT joins from the same two tables, but to different fields within those tables
我有一个信息表,其中包含以下字段;
id, staffMember, lineManager, description
staffMember和lineManager字段返回与user表中具有以下列的行的id相对应的整数值
id, firstname, surname
我可以使用以下查询返回信息表中的信息,将staffMember值替换为名字和姓氏的CONCAT:
SELECT information.id,
CONCAT( users.firstname, ' ', users.surname ) AS staffMember,
information.lineManager,
LEFT(information.description,200) As description
FROM information
LEFT JOIN users
ON ( information.staffMember = users.id )
LIMIT 0 , 30"
但我想要做的是重复在lineManager上的staffMember的值以及相同的查询(我然后作为json字符串传递)的过程 - 但是,我知道我不能有两个LEFT连接到同一个表,但等同于不同的字段。
我们将非常感激地提供任何帮助。
听起来你想要这个:
SELECT i.id,
CONCAT(u1.firstname, ' ', u1.surname) AS staffMember,
CONCAT(u2.firstname, ' ', u2.surname AS lineManager,
LEFT(i.description,200) As description
FROM information i
LEFT JOIN users u1
ON i.staffMember = u1.id
LEFT JOIN users u2
on i.lineManager = u2.id
LIMIT 0 , 30
您只需在users
表上执行两次LEFT JOIN
。 一旦您加入staffMember
,另一次您将加入lineManager
。 通过为表提供不同的表别名,您可以区分表和值。
如果你想更清楚:
SELECT i.id,
CONCAT(staff.firstname, ' ', staff.surname) AS staffMember,
CONCAT(manager.firstname, ' ', manager.surname AS lineManager,
LEFT(i.description,200) As description
FROM information i
LEFT JOIN users staff
ON i.staffMember = staff.id
LEFT JOIN users manager
on i.lineManager = manager.id
LIMIT 0 , 30
像这样的东西:
SELECT information.id FROM information
LEFT JOIN users u ON u.id = information.staffMember
LEFT JOIN users ul ON ul.id = information.lineManager
桌子后面的字母/单词完全由你完成。 它们是您动态组成的表名的别名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.