У меня есть простая структура «многие ко многим»:
Таблица 1: ITEM
Столбцы: ITEM_ID, ITEM_NAME
Таблица 2: Attribute
Столбцы: ATTRIBUTE_ID, ATTRIBUTE_NAME
Таблица 3: ITEM_ATTRIBUTE
ITEM_ID, ATTRIBUTE_ID
Я хочу, чтобы «получить все элементы, которые имеют следующие атрибуты x».X может быть любым количеством атрибутов.
Лучшее, что я придумал, заключается в следующем, но я считаю, что должен быть лучший способ с использованием объединений и / или предложений «где выбрать в» ...но я не могу думать об этом.
SELECT * FROM Item
WHERE Item.ITEM_ID IN
(SELECT ITEM_ATTRIBUTE.item_ID FROM ITEM_ATTRIBUTE WHERE ITEM_ATTRIBUTE.attribute_ID =1)
and Item.ITEM_ID in
(SELECT ITEM_ATTRIBUTE.item_ID FROM ITEM_ATTRIBUTE WHERE ITEM_ATTRIBUTE.attribute_ID =3);
Я бы предпочел не добавлять дополнительный "ITEM_ID в (...) для каждого атрибута в списке .. особенно если список атрибутов20+ длиннее