我想拉一个人,从表中他们的主管名字。该persons
表具有supervisor_id
和person_id
。该names
表有name_id
和Full Name
场。如果我加入Person
在任supervisor_id
或person_id
,我怎么得到其他显示呢?
你需要加入两次,一次为您的每个关系:
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
行(作为第一实施例)。
A(个体经营)连接是你所需要的:
select p.*, supervisor=ps.name
from Person p join person ps on p.supervisor_id=ps.id