我想从表中拉出一个人及其主管姓名。 persons
表具有supervisor_id
和person_id
。 names
表具有name_id
和Full Name
字段。如果我在Person
或supervisor_id
上加入person_id
,如何使另一个也显示?
答案 0 :(得分:1)
您需要加入两次,每个您所拥有的关系都必须加入:
SELECT
-- Persons' columns
P.*,
-- Superviser name columns
SN.*,
-- Person name columns
PN.*
FROM
persons AS P
LEFT JOIN names AS SN ON P.supervisor_id = SN.name_id
LEFT JOIN names AS PN ON P.person_id = PN.name_id
或者您可以使用OR
子句加入,但是除非您使用CASE
进行检查,否则您将无法知道要加入的记录。
SELECT
-- Persons' columns
P.*,
-- name columns
N.*,
IsSupervisor = CASE WHEN P.supervisor_id = N.name_id THEN 'Yes' ELSE 'No' END
FROM
persons AS P
LEFT JOIN names AS N ON
P.supervisor_id = N.name_id OR
P.person_id = N.name_id
这最后一种方法将显示2行,因为它将在不同情况下彼此匹配,而不是同时具有相同的persons
行(如第一个示例)。
答案 1 :(得分:1)
您需要一个(自我)联接:
select p.*, supervisor=ps.name
from Person p join person ps on p.supervisor_id=ps.id