复杂的查询 - 需要帮助!

时间:2009-12-13 01:43:24

标签: sql mysql group-concat locate

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

产品
PRODID

Prodequipment
PRODID
equipclassmain
equipclassor

Equipclasses
的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

但是我得到一个“字段列表中的列分类很模糊”。知道这里有什么问题吗?

谢谢!

2 个答案:

答案 0 :(得分:8)

您的查询引用了多个具有classid列的表格 因此,当您在classid子句中引用HAVING时,它不知道要获取classid的哪个表。

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

答案 1 :(得分:1)

这是来自查询的部分:

...
SELECT classid 
FROM Equipclasses JOIN (
    SELECT classid
    FROM Equipfunctions...

EquipClasses和内部查询都有classId。您需要指定要选择的内容。