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

異なる日のデータ比較を使用したSQL自己結合

    T1とT2からクエリを実行しているため、列が重複しています。したがって、T1のみを表示するように明示的に指定しない限り、両方のテーブルエイリアス参照から列が取得されます。

    クエリは日付に対してORを実行しているため、デカルト結果も取得される可能性があります。

    これでテーブル構造がわかりましたが、次のような明示的なクエリを使用した方がよい場合があります...

    SELECT
          t1.day,
          t2.day as OtherDay,
          t1.quality,
          t1.anotherColumn,
          t2.OtherAnotherColumn,
          t1.thirdColumn,
          t2.OtherThirdColumn
       FROM 
          my_table t1
             join my_table t2
                on t1.quality = t2.quality
               AND t2.day = '2015-01-09'
       where
          t1.day = '2015-01-08' 
    

    クエリを最適化するために、(日、品質)に基づいて「my_table」にインデックスを付けます。そして、day1とday2の間で比較しようとしている列をペアで追加し続けることができます。 T1は最初の日に関連付けられたもののみを返し、T2エイリアスは2番目の日付の一致するエントリに対してのみ表示されます。

    ここで、T1側にエントリがあり、問題の品質と日付に対応するT2エントリがないが、それでもそれらを表示したい場合は、JOINをLEFTJOINに変更します。




    1. Oracleエラーの一貫性のないデータ型:予期されたCHARが長くなりました

    2. MySQL innodbを解決する方法TRUNCATETABLEのテーブルメタデータロックを待機していますか?

    3. MySQLデータベースから300,000行を選択中に504ゲートウェイタイムアウトエラーが発生しました

    4. MySQL5.7でネストされたJSONデータ型を更新する方法