sql >> Databáze >  >> RDS >> Mysql

Jak seřadit výsledek více dotazů alternativně?

Takto to můžete udělat

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 ;

Cílem je přiřadit rn hodnotu pro každou položku tabulky a je třeba se ujistit, že tyto hodnoty jsou vždy ve vzestupném pořadí

Pokud tedy spustíte dotaz pro každou tabulku, budete mít

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)

Zde můžete vidět table1 rn hodnoty jsou 1,2,3,.... table2 hodnoty jsou 1.5,2.5,3.5,.... table3 hodnoty jsou 1.6,2.6,....

takže nakonec až si objednáte výsledek se všemi rn bude jako

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




  1. Postgresql &psycopg2:databáze neexistuje

  2. SUMTE pár COUNT ze dvou tabulek na základě časové proměnné

  3. Více hodnot v jednom sloupci nebo ne?

  4. nechtěné úvodní prázdné místo ve formátu čísel Oracle