sql >> Base de Datos >  >> RDS >> Mysql

Mejore la consulta MySQL con la subconsulta IN

MySQL no se puede cambiar la tabla principal y la conducida en IN cláusula. Esto será corregido en 6.0 .

Por ahora, puede reescribirlo así (requiere 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

Dado que está utilizando el EAV modelo en el que puede querer hacer un índice único en (attribute_name, item_id) en cuyo caso puede usar una combinación simple:

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'