Mysql
 sql >> Database >  >> RDS >> Mysql

Migliora le query MySQL con la sottoquery IN

MySQL non può cambiare la tabella principale e quella guidata nel IN clausola. Questo verrà corretto in 6.0 .

Per ora, puoi riscriverlo in questo modo (richiede un 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

Dato che stai usando il EAV modello potresti voler creare un indice univoco su (attribute_name, item_id) nel qual caso puoi usare un join semplice:

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'