sql >> データベース >  >> RDS >> Mysql

INサブクエリでMySQLクエリを改善する

    MySQL INの先行テーブルと被駆動テーブルを切り替えることはできません 句。これは 6.0で修正される予定です。 。

    今のところ、次のように書き直すことができます(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
    

    EAVを使用しているため (attribute_name, item_id)に一意のインデックスを作成したいモデル この場合、プレーン結合を使用できます:

    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テーブルの列位置を変更するにはどうすればよいですか?

    2. OracleのADD_MONTHS()関数

    3. 小文字を含む値を持つ行を見つける方法

    4. OracleからPostgreSQLへ:移行する理由