在2个字段上加入表格

时间:2019-02-05 14:10:54

标签: sql sql-server

我想从表中拉出一个人及其主管姓名。 persons表具有supervisor_idperson_idnames表具有name_idFull Name字段。如果我在Personsupervisor_id上加入person_id,如何使另一个也显示?

2 个答案:

答案 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