Сложный запрос - нужна помощь!

0

Надеюсь, кто-то может помочь мне в этом! У меня 6 таблиц:

Продукция
ProdID

Prodequipment
ProdID
equipclassmain
equipclassor

Equipclasses
ClassID

Equipfunctions
equipid
ClassID

Оборудование
equipid

Workshopequipment
workshopid
equipid

Продукты - список некоторых продуктов
Оборудование - список оборудования
Prodequipment - показывает, какое оборудование необходимо для создания продукта. Вы можете использовать оборудование, указанное в equipclassmain, или заменить его оборудованием в equapclassor. Продукты Table имеют одно отношение к настольному Prodequipment, т.е. Вы будете использовать множество различных инструментов (оборудования) для производства одного продукта, но вы можете использовать любого в парном equipclassmain/equipclassor. Например, чтобы сфотографировать фотографию, вы можете использовать деревянную раму или пластиковую раму (одну пару), а также крышку или пластиковую крышку (вторая пара). Вы можете комбинировать его по своему желанию, но использовать обе пары: деревянную раму с покровным стеклом или пластиковую раму с покровным стеклом или деревянную раму с пластмассовой крышкой или пластиковой рамкой с пластиковым покрытием.
Equipfunctions и Equipclasses. Поскольку одно оборудование может использоваться по-разному, оно не связано напрямую с таблицей Prodequipment. Я создал таблицу Equipclasses, в которой перечислены все одноразовое использование всех возможных устройств и таблицы Equipfunctions, где я перечисляю эти одноразовые приложения для каждого оборудования.
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

Но я получаю "Столбец столбца в списке полей неоднозначен". Любая идея, что здесь не так?

СПАСИБО!

Теги:
group-concat

2 ответа

8

В вашем запросе ссылаются несколько таблиц с столбцом classid.
Поэтому, когда вы ссылаетесь на classid в предложении HAVING, он не знает, какая таблица должна получить classid для.

Вам нужно написать tablename.classid, где tablename - имя таблицы, содержащей столбец classid. (Возможно equipclasslist; я не смотрел на запрос)

1

Он из части запроса с помощью:

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

Оба EquipClasses и внутренний запрос имеют classId. Вам нужно указать, что вы выбираете.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню