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

重複する組み合わせのないクロス ジョイン

    select A.id aid,B.id bid
    from A inner join B on a.id <= b.id
    union
    select B.id,A.id
    from A inner join B on b.id < a.id
    

    より洗練されたものにしたい場合:

    select distinct
           case when a.id<=b.id then a.id else b.id end id1,
           case when a.id<=b.id then b.id else a.id end id2
    from A cross join B
    

    小さなテーブルを使った私のちょっとした非科学的なベイクオフでは、後者の方が高速でした。以下、case サブクエリとして記述された式。

    select distinct
           (select MIN(id) from (select a.id union select b.id)[ ]) id1,
           (select MAX(id) from (select a.id union select b.id)[ ]) id2
    from A cross join B
    


    1. Entity Frameworkでデフォルト値を設定するにはどうすればよいですか

    2. テーブル追加列オラクルを変更する方法

    3. バインド変数を使用してDMLを挿入します:即時ステートメントの実行の句を使用します

    4. DB::rawとEloquentで同じクエリを使用した場合の異なる結果