首页 > 解决方案 > 加入 2 个字段的表格

问题描述

我想从表中提取一个人和他们的主管姓名。该persons表有supervisor_idperson_id。该names表有name_id一个Full Name字段。如果我加入PersonONsupervisor_idperson_id,我如何让另一个也显示?

标签: sqlsql-server

解决方案


您需要加入两次,每个关系一次:

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行(如第一个示例)。


推荐阅读