Вы, вероятно, хотите join таблицу item2cat на свой пункт таблицы:
SELECT
item.id
, item.name
, item.desc
FROM item
INNER JOIN item2cat ON item.id = item2cat.itemID
WHERE item2cat.catID = [category_id]
или, например
SELECT
item.id
, item.name
, item.desc
, category.id
, category.name
FROM item
INNER JOIN item2cat ON item.id = item2cat.itemID
INNER JOIN category ON item2cat.catID = category.id
WHERE category.id IN ([category_id], [category_id], [category_id])
UPDATE
Если вы изменили свои идентификаторы таблиц, как это:
item (itemId, name, desc)
item2cat (itemId, categoryId)
category (categoryId, name, etc)
можно переписать первый запрос, как:
SELECT
item.itemId
, item.name
, item.desc
FROM item
INNER JOIN item2cat USING(itemId)
WHERE item2cat.categoryId = [category_id]
Еще одно преимущество заключается в том, что id
столбец каждой таблицы теперь однозначно.
О, спасибо, в своем решении я зажмурил где часть. –
Зачем использовать LEFT OUTER JOIN, если вы хотите только перечислить элементы в данной категии? использование INNER JOIN должно быть намного более эффективным и избежать ненужных полномасштабных сканирований –
@Saggi Malachi, спасибо, обновлено – Jacco