多个JOIN在同一个表上的TSQL

时间:2018-12-12 13:50:42

标签: sql sql-server join select

在搜索了我的疑问之后,围绕着很多问题,我仍然无法获得想要的结果。 我试图将同一张表连接3次,但是Sqlserver无法识别字段。

CREATE PROCEDURE GetServices
AS
BEGIN
    SELECT
        [Service].ServiceID AS ServiceID,
        [Service].ServiceStart AS [Data de ínicio do serviço],
        EE.EntDescr AS Entidade,
        EE1.PartnerID AS Parceiro,
        EE2.Partner2ID AS [Segundo Parceiro],
        Circuit.CircuitDescr AS [Descrição do Circuito],
        Truck.TruckPlate AS Matrícula,
        [Service].StartKms AS [Km's Iniciais],
        [Service].StartCheck1 AS [Verificação 1],
        [Service].StartCheck2 AS [Verificação 2],
        [Service].StartCheck3 AS [Verificação 3],
        [Service].StartCheck4 AS [Verificação 4],
        [Service].StartCheck5 AS [Verificação 5],
        [Service].StartCheck6 AS [Verificação 6],
        [Service].ServiceEnd AS [Data de ínicio do serviço],
        [Service].EndKms AS [Km's Finais],
        [Service].HRCheck AS [Verificação HR],
        [Service].HRNotes AS [Notas HR]
    FROM
     [Service]
    LEFT OUTER JOIN EntEnt EE ON EE.EntID = [Service].DriverID
    LEFT OUTER JOIN EntEnt EE1 ON EE1.EntID = [Service].PartnerID
    LEFT OUTER JOIN EntEnt EE2 ON EE2.EntID = [Service].Partner2ID
    INNER JOIN Circuit on Circuit.CircuitID = [Service].CircuitID
    INNER JOIN Truck ON Truck.TruckID = [Service].TruckID
END

EE1.PartnerID AS Parceiro && EE2.Partner2ID AS [Segundo Parceiro] 收到无效的列名错误

2 个答案:

答案 0 :(得分:0)

根据您的查询,您查询的两个字段应为ee1.EntID和EE2.entID,因为Partner1ID和Partner2ID位于服务表中

答案 1 :(得分:0)

CREATE PROCEDURE GetServices
AS
BEGIN
    SELECT
        [Service].ServiceID AS ServiceID,
        [Service].ServiceStart AS [Data de ínicio do serviço],
        EE.EntDescr AS Entidade,
        Service.PartnerID AS Parceiro,
        Service.Partner2ID AS [Segundo Parceiro],
        Circuit.CircuitDescr AS [Descrição do Circuito],
        Truck.TruckPlate AS Matrícula,
        [Service].StartKms AS [Km's Iniciais],
        [Service].StartCheck1 AS [Verificação 1],
        [Service].StartCheck2 AS [Verificação 2],
        [Service].StartCheck3 AS [Verificação 3],
        [Service].StartCheck4 AS [Verificação 4],
        [Service].StartCheck5 AS [Verificação 5],
        [Service].StartCheck6 AS [Verificação 6],
        [Service].ServiceEnd AS [Data de ínicio do serviço],
        [Service].EndKms AS [Km's Finais],
        [Service].HRCheck AS [Verificação HR],
        [Service].HRNotes AS [Notas HR]
    FROM
     [Service]
    LEFT OUTER JOIN EntEnt EE ON EE.EntID = [Service].DriverID
    LEFT OUTER JOIN EntEnt EE1 ON EE1.EntID = [Service].PartnerID
    LEFT OUTER JOIN EntEnt EE2 ON EE2.EntID = [Service].Partner2ID
    INNER JOIN Circuit on Circuit.CircuitID = [Service].CircuitID
    INNER JOIN Truck ON Truck.TruckID = [Service].TruckID
END

//我认为您正在使用拧表。将EE1替换为Service可能有效