@nmyc

Как в join-e сделать множественное условие?

Добрый день.

Есть две таблицы:
items
item_id | item_name | ...

item_flags
item_id | flag_name | flag_value

Нужно получить все items, у которых включены некоторые flags (сразу два).

Сейчас это делается так:
SELECT * FROM items
JOIN item_flags as f1 ON (items.item_id = f1.item_id)
JOIN item_flags as f2 ON (items.item_id = f2.item_id)
....
WHERE
( f1.flag_name = '...' AND f1.flag_value = '...' ) AND
( f2.flag_name = '...' AND f2.flag_value = '...' )
...
GROUP BY items.item_id


То есть, для каждого следующего флага делается новый JOIN, а потом всё это группируется по итему.
Но мне кажется, что это какая-то очень глупая и неправильная схема, и можно сделать проще.
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 1
@vism
SELECT * FROM items
WHERE
EXISTS (
SELECT item_flags.item_id
FROM item_flags
WHERE  (item_flags.flag_name= '1' AND item_flags.flag_value = '1' AND item_flags.flag_name= '2' AND item_flags.flag_value = '2' AND item_flags.item_id = items.id))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы