Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Melhore a consulta do MySQL com a subconsulta IN


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'