1

我有一个信息表,其中包含以下字段;

id, staffMember, lineManager, description

staffMember 和 lineManager 字段返回整数值,这些值对应于用户表中的行 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 连接到同一个表,但等同于不同的字段。

任何帮助将不胜感激。

4

2 回答 2

3

听起来你想要这个:

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

您只需LEFT JOINusers桌子上执行两次。一次您将加入,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
于 2012-11-12T20:18:25.463 回答
0

像这样的东西:

SELECT information.id FROM information 
LEFT JOIN users u ON u.id = information.staffMember
LEFT JOIN users ul ON ul.id = information.lineManager

表格后面的字母/单词完全是你自己编的。它们是您即时编造的表名的别名。

于 2012-11-12T20:19:15.367 回答