Хорошо, допустим, у меня есть две таблицы:
- элементы с идентификаторами столбцов, вещи
- item_properties со столбцами item_id, prop_id
Теперь я хочу выполнить запрос, подобный
SELECT stuff FROM items WHERE
EXISTS(SELECT * FROM item_properties WHERE prop_id = 123 AND item_id = items.id)
AND EXISTS(SELECT * FROM item_properties WHERE prop_id = 456 AND item_id = items.id)
AND NOT EXISTS(SELECT * FROM item_properties WHERE prop_id = 789 AND item_id = items.id)
AND NOT EXISTS(SELECT * FROM item_properties WHERE prop_id = 101 AND item_id = items.id)
Что работает, но выглядит некрасиво и медленно. Кто-нибудь может придумать более разумный способ сделать это? При необходимости я также могу получить списки 123 456 и 789 101 через подзапрос из третьей таблицы. Я открыт для предложений по изменению дизайна моего стола.
Количество идентификаторов свойств, с которыми мне нужно проверить свойства элемента, может варьироваться.
Спасибо!