MySQL
nie można zamienić tabeli wiodącej i sterowanej w IN
klauzula. Zostanie to poprawione w 6.0
.
Na razie możesz to przepisać w ten sposób (wymaga 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
Ponieważ używasz EAV
model, na którym możesz chcieć utworzyć unikalny indeks na (attribute_name, item_id)
w takim przypadku możesz użyć zwykłego przyłączenia:
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'