Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verbessern Sie die MySQL-Abfrage mit der IN-Unterabfrage

MySQL kann die führende und die getriebene Tabelle im IN nicht vertauschen Klausel. Dies wird in 6.0 korrigiert .

Im Moment können Sie es so umschreiben (erfordert einen 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

Da Sie den EAV verwenden model möchten Sie vielleicht einen eindeutigen Index für (attribute_name, item_id) erstellen in diesem Fall können Sie einen einfachen Join verwenden:

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'