Надеюсь, кто-то может помочь мне в этом! У меня 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
Но я получаю "Столбец столбца в списке полей неоднозначен". Любая идея, что здесь не так?
СПАСИБО!
В вашем запросе ссылаются несколько таблиц с столбцом classid
.
Поэтому, когда вы ссылаетесь на classid
в предложении HAVING
, он не знает, какая таблица должна получить classid
для.
Вам нужно написать tablename.classid
, где tablename
- имя таблицы, содержащей столбец classid
. (Возможно equipclasslist
; я не смотрел на запрос)
Он из части запроса с помощью:
...
SELECT classid
FROM Equipclasses JOIN (
SELECT classid
FROM Equipfunctions...
Оба EquipClasses и внутренний запрос имеют classId. Вам нужно указать, что вы выбираете.