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

複数のクエリの結果を交互に並べ替える方法は?

    これがあなたがこれを行う方法です

    select @rn:[email protected]+1 as id,colors from (
      (select @rn1:= @rn1+1 as rn,colors from table1,(select @rn1:=0)x order by id )
       union all 
      (select @rn2:= @rn2+1 as rn,numbers as colors from table2,(select @rn2:=0.5)x order by id)
       union all 
      (select @rn3:= @rn3+1 as rn,names as colors from table3,(select @rn3:=0.6)x order by id )
    )x,(select @rn:=0)y order by rn ;
    

    アイデアは、rnを割り当てることです 各テーブルアイテムの値であり、これらの値が常に昇順であることを確認する必要があります

    したがって、テーブルごとにクエリを実行すると、次のようになります

    mysql> select @rn1:= @rn1+1 as rn,colors from table1,(select @rn1:=0)x order by id;
    +------+--------+
    | rn   | colors |
    +------+--------+
    |    1 | red    |
    |    2 | green  |
    |    3 | blue   |
    |    4 | yellow |
    +------+--------+
    4 rows in set (0.00 sec)
    
    mysql> select @rn2:= @rn2+1 as rn,numbers as colors from table2,(select @rn2:=0.5)x order by id;
    +------+--------+
    | rn   | colors |
    +------+--------+
    |  1.5 | ten    |
    |  2.5 | two    |
    |  3.5 | one    |
    |  4.5 | three  |
    |  5.5 | six    |
    |  6.5 | five   |
    +------+--------+
    6 rows in set (0.00 sec)
    
    mysql> select @rn3:= @rn3+1 as rn,names as colors from table3,(select @rn3:=0.6)x order by id;
    +------+--------+
    | rn   | colors |
    +------+--------+
    |  1.6 | jack   |
    |  2.6 | peter  |
    +------+--------+
    2 rows in set (0.00 sec)
    

    ここでtable1 rnを見ることができます 値は1,2,3,.... table2 値は1.5,2.5,3.5,.... table3 値は1.6,2.6,....

    したがって、最終的にすべてのrnで結果を注文すると、次のようになります

    1,1.5,1.6,2,2.5,2.6,....




    1. Postgres:ブール値に基づいて列名を選択します

    2. perlを使用してOracleで複数回クエリを実行すると、最初のクエリのみが返されます

    3. MySQL SelectWHEREIN指定された順序

    4. SQLServer2000-リンクサーバー