T-SQL语法错误 - 无法找到我做错的地方

时间:2018-01-19 13:14:56

标签: sql tsql

我正在尝试向现有报告添加一些额外信息,SQL查询要求我添加引用额外表的INNER JOIN。

我不是SQL大师,只知道基础知识,所以我很想找到我在这个查询中创建语法错误。

在比较当前工作代码(左侧)和错误代码(右)的图片下方 - 我得到的错误是'FROM子句中的语法错误

enter image description here

任何人都可以看看这个并告诉我在哪里引入语法错误?

不确定是否有帮助,但这是错误的代码:

SELECT ToolLists.Ident, 
    ToolLists.Descript AS TLDescript, 
    ToolLists.MaterialNr, 
    ToolLists.Order,
    ToolLists.Who, 
    ToolLists.NCP, 
    ToolLists.Rem      AS TLRem, 
    ToolLists.MDate,
    ToolLists.TDate, 
    ToolLists.GDate,
    ToolList.T, 
    Machines.Name      AS MachineName, 
    Machines.TRelation, 
    ToolList.D, 
    ToolList.H, 
    ToolList.Pos       AS ToolListPos, 
    ToolList.Rem       AS ToolListRem, 
    ToolList.How       AS ToolListHow, 
    Tools.Nr, 
    Tools.Z1, 
    Tools.Drawing, 
    Tools.X1, 
    Tools.Sort,
    Tools.Design,
    Tools.Descript,
    Tools.Rem          AS ToolRem, 
    ToolParts.Pos      AS ToolPartPos, 
    ToolParts.Nbr, 
    ToolParts.How, 
    Parts.UNr, 
    Parts.MID,
    Parts.Descript,
    Parts.Sort,
    Parts.Design,
    Parts.URem,
    Parts.DMC,
    Parts.CLength, 
    Parts.CMainArc, 
    Parts.CRadius, 
    Parts.UActiv,
    MatClasses.DMC,
    MatClasses.Description, 
    MatClasses.Quality, 
    NoteParts.NoteText,
    SP.Place
    FROM   (Parts 
    RIGHT JOIN ((Machines 
                    RIGHT JOIN ((MatClasses 
                    RIGHT JOIN (Materials 
RIGHT JOIN ((SELECT ID, 
    Param1 
    FROM   WTDIDList 
    WHERE  WTGUID = '8c68ba58-5ad5-4a13-9bd4-0c4d1109d7c8' 
                                           ) 
                                           AS IDList 
                                            INNER JOIN ToolLists 
                                                    ON IDList.ID = 
                                                       ToolLists.Nr) 
                                        ON Materials.Nr = 
                                           ToolLists.MaterialNr) 
                            ON MatClasses.Nr = Materials.MatClassNr) 
                                INNER JOIN (Tools 
                                            INNER JOIN ToolList 
                                                    ON Tools.Nr = 
                                                       ToolList.ToolNr) 
                                        ON ToolLists.Nr = ToolList.ToolListNr) 
                            ON Machines.Nr = ToolLists.MachineNr) 
                   INNER JOIN ToolParts 
                           ON Tools.Nr = ToolParts.ToolNr) 
               ON Parts.ID = ToolParts.PartID)
                   INNER JOIN NoteParts
                           ON ToolParts.PartID = NoteParts.Nr)
               ON Parts.ID = ToolParts.PartID)
LEFT JOIN (SELECT PartId, Place FROM SiteParts WHERE SiteNr = 1) AS SP ON SP.PartId = Parts.Id
ORDER  BY ToolLists.Nr, 
          ToolList.Pos, 
          ToolList.T;

2 个答案:

答案 0 :(得分:0)

看起来很多或没有足够的结束括号。我已经格式化了一下,认为这是你想要完成的。这应该摆脱语法错误。希望它能返回您正在寻找的结果。

  

- 更改SELECT *实际的select语句。

SELECT *
FROM   (Parts 
    RIGHT JOIN (
        (Machines 
            RIGHT JOIN (
                (MatClasses 
                    RIGHT JOIN (Materials 
                        RIGHT JOIN (
                            (SELECT ID, Param1 FROM   WTDIDList WHERE  WTGUID = '8c68ba58-5ad5-4a13-9bd4-0c4d1109d7c8' ) AS IDList 
                            INNER JOIN ToolLists ON IDList.ID = ToolLists.Nr
                        ) 
                    ON Materials.Nr = ToolLists.MaterialNr
                    ) 
                ON MatClasses.Nr = Materials.MatClassNr
                ) 
                INNER JOIN (Tools 
                INNER JOIN ToolList 
                    ON Tools.Nr = ToolList.ToolNr
                ) 
        ON ToolLists.Nr = ToolList.ToolListNr
            ) 
        ON Machines.Nr = ToolLists.MachineNr
        ) 
        INNER JOIN ToolParts 
            ON Tools.Nr = ToolParts.ToolNr
    ) 
    INNER JOIN NoteParts
        ON ToolParts.PartID = NoteParts.Nr
         ON Parts.ID = ToolParts.PartID
 )
    LEFT JOIN (SELECT PartId, Place FROM SiteParts WHERE SiteNr = 1) AS SP ON SP.PartId = Parts.Id

答案 1 :(得分:0)

此部分为红色正常

NoteParts.NoteText,

如果你与整个FROM子句一起分析它,太多的结束标记")"这部分有一个错误的sintax。错误的位置,重复的ON等。

INNER JOIN NoteParts
                           ON ToolParts.PartID = NoteParts.Nr)
               ON Parts.ID = ToolParts.PartID)

我修改了这部分,所以它应该适合你

SELECT *         FROM   (Parts 
        RIGHT JOIN ((Machines 
                        RIGHT JOIN ((MatClasses 
                        RIGHT JOIN (Materials 
    RIGHT JOIN ((SELECT ID, 
        Param1 
        FROM   WTDIDList 
        WHERE  WTGUID = '8c68ba58-5ad5-4a13-9bd4-0c4d1109d7c8' 
                                               ) 
                                               AS IDList 
                                                INNER JOIN ToolLists 
                                                        ON IDList.ID = 
                                                           ToolLists.Nr) 
                                            ON Materials.Nr = 
                                               ToolLists.MaterialNr) 
                                ON MatClasses.Nr = Materials.MatClassNr) 
                                    INNER JOIN (Tools 
                                                INNER JOIN ToolList 
                                                        ON Tools.Nr = 
                                                           ToolList.ToolNr) 
                                            ON ToolLists.Nr = ToolList.ToolListNr) 
                                ON Machines.Nr = ToolLists.MachineNr) 
                       INNER JOIN ToolParts ON Tools.Nr = ToolParts.ToolNr
                       INNER JOIN NoteParts ON ToolParts.PartID = NoteParts.Nr) 
                   ON Parts.ID = ToolParts.PartID)
    LEFT JOIN (SELECT PartId, Place FROM SiteParts WHERE SiteNr = 1) AS SP ON SP.PartId = Parts.Id
    ORDER  BY ToolLists.Nr, 
              ToolList.Pos, 
              ToolList.T;

在这里你有完整的查询,所以只需复制粘贴。

SELECT ToolLists.Ident, 
    ToolLists.Descript AS TLDescript, 
    ToolLists.MaterialNr, 
    ToolLists.Order,
    ToolLists.Who, 
    ToolLists.NCP, 
    ToolLists.Rem      AS TLRem, 
    ToolLists.MDate,
    ToolLists.TDate, 
    ToolLists.GDate,
    ToolList.T, 
    Machines.Name      AS MachineName, 
    Machines.TRelation, 
    ToolList.D, 
    ToolList.H, 
    ToolList.Pos       AS ToolListPos, 
    ToolList.Rem       AS ToolListRem, 
    ToolList.How       AS ToolListHow, 
    Tools.Nr, 
    Tools.Z1, 
    Tools.Drawing, 
    Tools.X1, 
    Tools.Sort,
    Tools.Design,
    Tools.Descript,
    Tools.Rem          AS ToolRem, 
    ToolParts.Pos      AS ToolPartPos, 
    ToolParts.Nbr, 
    ToolParts.How, 
    Parts.UNr, 
    Parts.MID,
    Parts.Descript,
    Parts.Sort,
    Parts.Design,
    Parts.URem,
    Parts.DMC,
    Parts.CLength, 
    Parts.CMainArc, 
    Parts.CRadius, 
    Parts.UActiv,
    MatClasses.DMC,
    MatClasses.Description, 
    MatClasses.Quality, 
    NoteParts.NoteText,
    SP.Place
    FROM   (Parts 
    RIGHT JOIN ((Machines 
                    RIGHT JOIN ((MatClasses 
                    RIGHT JOIN (Materials 
RIGHT JOIN ((SELECT ID, 
    Param1 
    FROM   WTDIDList 
    WHERE  WTGUID = '8c68ba58-5ad5-4a13-9bd4-0c4d1109d7c8' 
                                           ) 
                                           AS IDList 
                                            INNER JOIN ToolLists 
                                                    ON IDList.ID = 
                                                       ToolLists.Nr) 
                                        ON Materials.Nr = 
                                           ToolLists.MaterialNr) 
                            ON MatClasses.Nr = Materials.MatClassNr) 
                                INNER JOIN (Tools 
                                            INNER JOIN ToolList 
                                                    ON Tools.Nr = 
                                                       ToolList.ToolNr) 
                                        ON ToolLists.Nr = ToolList.ToolListNr) 
                            ON Machines.Nr = ToolLists.MachineNr) 
                   INNER JOIN ToolParts ON Tools.Nr = ToolParts.ToolNr
                   INNER JOIN NoteParts ON ToolParts.PartID = NoteParts.Nr) 
               ON Parts.ID = ToolParts.PartID)
LEFT JOIN (SELECT PartId, Place FROM SiteParts WHERE SiteNr = 1) AS SP ON SP.PartId = Parts.Id
ORDER  BY ToolLists.Nr, 
          ToolList.Pos, 
          ToolList.T;