复杂的查询 - 需要帮助!

0 mysql sql group-concat locate

真的希望有人可以帮我这个!我有6张桌子:

产品
十足

Prodequipment
prodid
equipclassmain
equipclassor

装备类
classid

Equipfunctions
equipid
的classid

设备
equipid

Workshopequipment
workshopid
equipid

产品 -一些产品列表
设备 -一些设备清单
Prodequipment -做一个产品所需要的设备清单.您可以使用equipclassmain中列出的设备,也可以使用equipclassor中的设备进行更换.表格产品与表格设备有一对多关系,即您将使用许多不同的工具(设备)来生产一种产品,但您可以选择使用对象equipclassmain/equipclassor中的任何人.例如,为了拍摄照片,您可以使用木制框架或塑料框架(一对)和盖玻片或盖塑料(第二对).您可以根据需要组合使用,但应使用两对:带盖玻璃的木框或带盖玻璃的塑料框架或带塑料盖的木框或带塑料盖的塑料框架.
设备功能设备 - 由于一件设备可以以不同的方式使用,因此它不直接与工作台设备相关联.我已经创建了table Equipclasses,其中列出了所有可能设备的所有单一用途,并且我列出了每台设备的单一用途的设备功能.
Workshopequipment - 列出他们正在使用的工作室和设备.

现在我需要一个可以由两个不同的给定车间制造的产品清单(比如workshopid = 1和workshopid = 4),即这两个车间都有生产这些产品所需的所有设备.请记住,如上所述,那些工作台不必使用相同的设备.

我正在尝试这个查询:

SELECT prodid FROM Products JOIN (
    SELECT workshopid, prodlist, equipclassmain, equipclassor, 
        if( LOCATE( equipclassmain, prodlist ) >0 
            AND LOCATE( equipclassor, prodlist ) >0, 1, 0 ) AS pairstatus FROM Prodequipment JOIN
    (
        SELECT classid FROM Equipclasses JOIN (
            SELECT classid FROM Equipfunctions JOIN (
                SELECT workshopid, GROUP_CONCAT( equipid ) AS prodlist FROM Workshopequipment 
                    GROUP BY workshopid
            ) 
            equipfunclist GROUP BY equipid 
        ) equipclasslist GROUP BY classid
    ) WorkshopequipmentList HAVING pairstatus = 1 AND workshopid in (1, 4)
) prodbyworkshops ON classid = equipclassmain OR classid = equipclassor
Run Code Online (Sandbox Code Playgroud)

但我得到一个"字段列表中的列classid是模糊的".知道这里有什么问题吗?

谢谢!

SLa*_*aks 8

您的查询引用了具有classid列的多个表.
因此,当您classidHAVING子句中引用时,它不知道要获取classidfor的表.

你需要写tablename.classid,其中tablename是包含表的名称classid列.(可能equipclasslist;我没看过查询)