MySQL
não pode alternar a tabela inicial e a tabela orientada no IN
cláusula. Isso será corrigido em 6.0
. Por enquanto, você pode reescrevê-lo assim (requer um
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
Como você está usando o
EAV
model você pode querer fazer um índice único em (attribute_name, item_id)
nesse caso você pode usar uma junção simples: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'