sql >> Database >  >> RDS >> Mysql

Verbeter MySQL-query met IN-subquery

MySQL kan de leidende en de aangestuurde tabel niet omwisselen in de IN clausule. Dit wordt gecorrigeerd in 6.0 .

Voor nu kun je het zo herschrijven (vereist een 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

Aangezien u de EAV . gebruikt model wilt u misschien een unieke index maken op (attribute_name, item_id) in dat geval kun je een gewone join gebruiken:

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'


  1. MySql verleent machtigingen voor alle databases die beginnen met <string>

  2. Een subtekenreeks extraheren uit een tekenreeks in Oracle/SQLite

  3. Ondersteuning voor MariaDB 10.4 in geüpgradede dbForge Studio voor MySQL, v.8.1

  4. Hoe de recursieve SELECT-query in MySQL te doen?