У меня есть 3 таблицы, которые выглядят так:
Таблица 1 (основная таблица):
item_id (item_id, item_name) // item_id set to primary
row1 (1, "item 1")
row2 (2, "item 2")
row3 (3, "item 3")
Таблица 2 (связываниетаблица):
item_keywords (ikid, #item_id, #keyword_id) // ikid is set to primary
row1 (1, 1, 1)
row2 (2, 1, 2)
row3 (3, 1, 3)
row4 (4, 2, 1)
row5 (5, 3, 1)
Таблица 3:
keywords (keyword_id, keyword_name) // keyword_id is set to primary
row1 (1, "key1")
row2 (2, "key2")
row3 (3, "key3")
row4 (4, "key4")
row5 (5, "key5")
Я хотел бы сделать запрос, который возвращает все элементы, которые содержат определенныеключевые слова И также не содержат некоторые другие ключевые слова.
Если вы посмотрите на данные таблицы выше, вы увидите, что:
Item 1 contains keywords with ids: 1,2 and 3;
Item 2 contains keyword with id: 1
item 3 contains keyword_id =1
Так что мне нужен запрос, который вернет все элементы, которыесодержат key1 (keyword_id = 1) и НЕ содержат key3 (keyword_id = 3).В этом примере запрос должен вернуть key2 (keyword_id = 2), key3 (keyword_id = 3).
Примерно так:
SELECT a.*
FROM items a
JOIN item_keywords b ON b.item_id = a.item_id
WHERE b.keyword_id = 1
AND b.keyword_id != 3
Но это не работает должным образом, потому что запрос возвращает key1, key2 и key3.Ответ должен быть: key2 и key3.Какой самый простой способ сделать это?