2个字段接合表

问题描述 投票:-2回答:2

我想拉一个人,从表中他们的主管名字。该persons表具有supervisor_idperson_id。该names表有name_idFull Name场。如果我加入Person在任supervisor_idperson_id,我怎么得到其他显示呢?

sql sql-server
2个回答
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
投票

A(个体经营)连接是你所需要的:

select p.*, supervisor=ps.name
from Person p join person ps on p.supervisor_id=ps.id
© www.soinside.com 2019 - 2024. All rights reserved.