sql >> Databáze >  >> RDS >> Mysql

Vylepšete dotaz MySQL pomocí poddotazu IN

MySQL nelze přepnout úvodní a řízenou tabulku v IN doložka. Toto bude opraveno v 6.0 .

Prozatím to můžete přepsat takto (vyžaduje 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

Protože používáte EAV možná budete chtít vytvořit jedinečný index na (attribute_name, item_id) v takovém případě můžete použít jednoduché spojení:

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. Jak zašifrovat pohled na SQL Server

  2. ClusterControl - Pokročilá správa zálohování - PostgreSQL

  3. Emulujte klauzuli MySQL LIMIT v Microsoft SQL Server 2000

  4. možnosti příkazu case rozdělené na dva výstupní sloupce