2009-12-16 5 views
0

Comment puis-je faire une requête SQL comme ce qui suit:print MySQL UNION tous les autres

(SELECT `name` FROM table1) 
UNION 
(SELECT `name` FROM table2) 

retour les uns des autres. C'est à dire. nom1 de table1, nom1 de table2, nom2 de table1, nom2 de table2 et ainsi de suite?

Edit: Tableau 1

name 
Hello 
world 

Tableau 2

name 
guten 
tag 

La sortie souhaitée:

Hello 
guten 
world 
tag 

et cela devrait également être possible si l'ajout de syndicats, de sorte qu'il faut de la première union, puis la deuxième, troisième, quatrième et ainsi de suite.

+0

Je ne sais pas ce que vous entendez par « retourner les uns des autres ». Pourriez-vous donner quelques exemples de données dans table1 et table2, et la sortie désirée? –

Répondre

2

Vous pouvez numéroter les lignes avec des variables, en utilisant 2,4,6, ... pour la première partie du syndicat et 3,5,7, ... pour la seconde:

select @rownum1 := @rownum1+2 as rownum, name 
from (select @rownum1:=0) r, table1 
union all 
select @rownum2 := @rownum2+2 as rownum, name 
from (select @rownum2:=1) r, table2 
order by rownum; 

Le select dans la clause from (select @rownum2:=1) r sert uniquement à initialiser la variable.

+0

très éligant avec l'entrelacement de rownum –

2

Est-ce que cela fonctionne?

set @i = 0; 
set @j = 1; 

select @i:[email protected]+2 as rownumber, 
     name 
from table1 

union 

select @j:[email protected]+2 as rownumber, 
     name 
from table2 

order by rownumber 

Je lis votre question vouloir alterner une ligne de table1, un de table2 et ainsi de suite dans vos résultats fixés.

Modifier à la lumière de votre édition:

changer le « 2 » s au nombre de tables et ajouter autant de variables que vous avez des tables, avec des valeurs de début consécutives dans les états « set ». Cela s'étendra comme vous le souhaitez.

+0

Ah, ça va probablement marcher. Je vais essayer. – xintron

+0

+1 Avait la même idée, n'a pas vu votre réponse avant de poster – Andomar

0

Dans une veine similaire à David M, vous pouvez faire:

(SELECT @rownum:[email protected]+1 as rownum,`name` FROM table1, (SELECT @rownum:=0) r) 
UNION 
(SELECT @rownum:[email protected]+1 as rownum,`name` FROM table2, (SELECT @rownum:=0) r) 
order by rownum