Así es como puedes hacer esto
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 ;
La idea es asignar un rn
valor para cada elemento de la tabla y debe asegurarse de que estos valores estén siempre en orden ascendente
Entonces, si ejecuta la consulta para cada tabla, tendrá
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)
Aquí puedes ver table1 rn
los valores son 1,2,3,....
table2
los valores son 1.5,2.5,3.5,....
table3
los valores son 1.6,2.6,....
así que finalmente cuando ordenes el resultado con todo rn será como
1,1.5,1.6,2,2.5,2.6,....