【问题标题】:Multiple JOIN on the same table TSQL同一张表TSQL上的多个JOIN
【发布时间】:2018-12-12 13:50:41
【问题描述】:

在搜索了我的疑问之后,围绕着很多关于这个的问题我仍然无法得到我想要的结果。 我尝试加入同一个表 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], 出现列名无效错误

【问题讨论】:

  • EntEnt 表真的有那 2 个吗?
  • 如果我们能看到表格的结构可能会有所帮助
  • 您也可以创建一个函数并传递参数给它以获取值

标签: sql sql-server join select


【解决方案1】:
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

// 我认为您使用的是 wring table。将 EE1 替换为 Service 可能会起作用

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 这应该是一条评论。如果您没有足够的代表发表评论,那么要么给出完整的答案,要么什么也不说:-)
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 2016-10-14
    • 2021-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多