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

2つの列の組み合わせに対して個別のレコードを取得するSQL(順序に関係なく)

    これがleast()を使用する1つのメソッドです およびgreatest()

    select least(source, destination), greatest(source, destination), max(distance)
    from distance
    group by least(source, destination), greatest(source, destination);
    

    これには、テーブルにない行を返す可能性があるという欠点があります。たとえば、「Mumbai / Chennai / 500」の行が1つある場合、このクエリは「Chennai / Mumbai / 500」を返します。この行は、元のテーブルにはありません。

    したがって、別の方法は次のとおりです。

    select source, destination, distance
    from distance
    where source < destination
    union all
    select destination, source, distance
    from distance d
    where source > destination and
          not exists (select 1
                      from distance d2
                      where d2.source = d.destination and d2.destination = d.source
                     );
    

    このバージョンもANSI互換であり、すべてのデータベースで機能するはずです。



    1. MySQLでクロスデータベース外部キー制約を生成しないDoctrine

    2. データベースから現在のユーザーIDを取得して、新しいテーブルで使用します

    3. mysqlクエリ-2つの外部キー

    4. ファイル内のX行を無視してSQLファイルをデータベースにインポートする方法は?