MySQL
не може да превключи водещата и управляваната таблица в IN
клауза. Това ще бъде коригирано в 6.0
.
Засега можете да го пренапишете така (изисква JOIN
):
SELECT i.*
FROM (
SELECT DISTINCT item_id
FROM item_attributes a
WHERE a.attribute_name = 'SomeAttribute'
AND a.attribute_value = 'SomeValue'
) ai
JOIN items i
ON i.id = ai.item_id
Тъй като използвате EAV
модел, който може да искате да направите уникален индекс на (attribute_name, item_id)
в този случай можете да използвате обикновено присъединяване:
SELECT i.*
FROM item_attributes ai
JOIN items i
ON i.id = ai.item_id
WHERE a.attribute_value = 'SomeValue'
AND a.attribute_name = 'SomeAttribute'