sql >> Databasteknik >  >> RDS >> Mysql

Förbättra MySQL Query med IN Subquery

MySQL kan inte växla mellan den inledande och den drivna tabellen i IN klausul. Detta kommer att korrigeras i 6.0 .

För nu kan du skriva om det så här (kräver en 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

Eftersom du använder EAV modell du kanske vill göra ett unikt index på (attribute_name, item_id) i så fall kan du använda en vanlig join:

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. Laravel 4:multipel där med eller i vältalig

  2. Hur SQLite Trim() fungerar

  3. Beräkna skillnaden mellan två datum i timmar och minuter

  4. Ansluter Delphi till Salesforce.com