我刚刚登陆这个新工作,并且有一个报告,我要求显示存储在另一个表中的信息,所以我需要增强由离开公司的人开发的现有查询。
查询相当长,我没有到达应该插入INNER JOIN子句的位置,该子句将检索我需要的信息。
这是原始代码:
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,
NoteToolLists.NoteText
FROM Parts
INNER JOIN ( (Machines
RIGHT JOIN ( (MatClasses
RIGHT JOIN (NoteToollists
RIGHT JOIN (Materials
RIGHT JOIN ([SELECT ID, Param1 FROM WTDIDList WHERE WTGUID = '4a9b5a05-fa43-48d1-af2f-342ea407f4e2']. AS IDList
INNER JOIN ToolLists ON IDList.ID = ToolLists.Nr) ON Materials.Nr = ToolLists.MaterialNr) ON NoteToolLists.Nr = ToolLists.Nr) 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
ORDER BY ToolLists.Nr,
ToolList.Pos,
ToolList.T;
有一个名为SiteParts
的表,其中包含一个名为Place
的列 - 我需要检索此列中的值,其中列PartId
的值等于列{{表ID
所以我尝试将其添加到上面的代码中:
Parts
所以这是我的尝试:
INNER JOIN (SELECT Place FROM SiteParts) ON SiteParts.PartId = Parts.ID
但服务器拒绝我的查询,并显示以下消息:
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,
NoteToolLists.NoteText,
SiteParts.Place
FROM Parts
INNER JOIN ( (Machines
RIGHT JOIN ( (MatClasses
RIGHT JOIN (NoteToollists
RIGHT JOIN (Materials
RIGHT JOIN ([SELECT ID, Param1 FROM WTDIDList WHERE WTGUID = '4a9b5a05-fa43-48d1-af2f-342ea407f4e2']. AS IDList
INNER JOIN ToolLists ON IDList.ID = ToolLists.Nr)
INNER JOIN
(SELECT Place
FROM SiteParts)) ON Materials.Nr = ToolLists.MaterialNr) ON NoteToolLists.Nr = ToolLists.Nr) 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 ON PartId = Parts.Id
ORDER BY ToolLists.Nr,
ToolList.Pos,
ToolList.T;
我已经重复了很多次,但我无法正确处理这个长查询。有人能指出我做错了吗?
很明显我不像前一个人那样擅长SQL,但是我需要赶上并尝试使用当前代码来处理它而不是重新编写它只是因为我不知道如何他做到了。
答案 0 :(得分:1)
即使查询非常复杂并且可以使用一些重写,但答案应该非常简单。
将此添加到/^(my|the) name is (\w+)$/ => 4 words
- 部分:
SELECT
...正如您在尝试中所做的那样(此条目与上一个/下一个条目之间使用逗号)。
然后将其添加到SiteParts.Place
- 行上方的新行中:
ORDER BY
应该这样做。
答案 1 :(得分:0)
此代码有效 - 必须重写一下,但现在可以正常工作:
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
FROM (Parts
RIGHT JOIN ((Machines
RIGHT JOIN ((MatClasses
RIGHT JOIN (Materials
RIGHT JOIN (
(SELECT ID,
Param1
FROM WTDIDList
WHERE WTGUID = '0e2c2ffe-6c09-4866-a114-5c0e2fe6260c' ) 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)
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;
在查询结束时作为LEFT JOIN的解决方案。
感谢各位和大家的有益帮助!