sql >> Databasteknik >  >> RDS >> Mysql

Hur sorterar man resultatet av flera frågor alternativt?

Så här kan du göra detta

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 ;

Tanken är att tilldela en rn värde för varje tabellobjekt och måste se till att dessa värden alltid är i stigande ordning

Så om du kör frågan för varje tabell du kommer att ha

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)

Här kan du se table1 rn värden är 1,2,3,.... table2 värden är 1.5,2.5,3.5,.... table3 värdena är 1.6,2.6,....

så äntligen när du beställer resultatet med alla rn blir det som

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




  1. Ta reda på var din PHP-kod saktar ner (prestandaproblem)

  2. tempdb-förbättringar i SQL Server 2019

  3. Det vanliga MySQL-felet:"Fick ett fel när kommunikationspaketet lästes"

  4. Hur man exporterar Oracle-frågeresultat till en JSON-fil när du använder SQLcl