2009-10-19 9 views
1

J'ai besoin d'une requête pour effectuer une sélection sur table1 et table2. Je veux qu'ils apparaissent comme un résultat commun, mais sans aucune connexion il n'y a aucune valeur de la table 1 qui correspond à n'importe quelle valeur de la table 2. Donc si un résultat provenait de table1, il devrait contenir les valeurs table1.a, table1.b, table1.c si elle vient de table2, elle devrait avoir table2.d, table2.e, table2.f avec les valeurs de a, b, c vides.MYSQL: Deux tables SELECT sans valeurs communes

SELECT * FROM table1, table2 

... ne m'aide pas car il fait toujours des connexions, connecte le résultat de table1 et table2 dans un résultat. Je dois les avoir séparés, chaque résultat sa propre rangée.

Est-ce simple, difficile ou impossible?

Répondre

4

Vous devez utiliser le même alias pour les colonnes équivalentes des deux tables, comme dans:

(select a as FIRST_COL 
    from table 1 
) 
union 
(select d as FIRST_COL 
    from table2 
) 
2

Tant que les types de colonnes sont identiques, vous pouvez utiliser une union. Par exemple:

select a, b, c 
from table1 
union 
select d, e, f 
from table2 

Si elles ne sont pas les mêmes, vous pouvez toujours le faire en créant des colonnes factices ». Tant que le type et le nombre de colonnes sont identiques, les résultats apparaîtront sous la forme d'un ensemble de lignes.

+0

vous remercie tous pour votre aide! fonctionne parfaitement –

0

Essayez ceci:

SELECT * FROM table1 UNION SELECT * FROM table2 
+0

Sauf erreur, cela ne fonctionnera que si le nombre de colonnes de la table1 est égal au nombre de colonnes de la table2. Mais cela fait un moment que j'ai fait des UNIONs dans MySQL, peut-être que ça a changé. – Tenner

+0

Oui, je pense que le nombre et le type de colonnes doivent être les mêmes, et peut-être aussi les noms/alias. Mais une requête UNION est la voie à suivre. – gkrogers

2

Si je comprends votre souhait select a, b, c, '', '', '' de table1 union '', '', '', e, f, g de la table2

remplacez '' avec votre espace de stockage favori pour la colonne vide a, b, c - noms de colonnes.

0

Je tentais de faire quelque chose de similaire et n'a pas été vraiment satisfait des réponses que je trouvais donc je suis venu avec l'implemntation suivante.

/* Create Sample Data 
*/ 
declare @a table(a varchar(max)) 
declare @b table(b varchar(max)) 
insert @a (a) 
values('a1'),('a2'),('a3'),('a4'); 

insert @b (b) 
values('b1'),('b2'),('b3'); 

/* Show Cartesian Intersection of both tables 
*/ 
select * from @a, @b 

/* Create matching table variables with ID column 
*/ 
declare @aIdx table(a varchar(max), Id int identity(1,1)) 
declare @bIdx table(b varchar(max), Id int identity(1,1)) 

insert into @aIdx (a) 
select a 
from @a 

insert into @bIdx (b) 
select b 
from @b 

/* Join Record by Record 
*/ 
select 
    l.Id, 
    l.a, 
    r.b 
from @aIdx l full outer join @bIdx r on l.Id = r.Id 

cartésien des deux tables est:

a1 b1 
a2 b1 
a3 b1 
a4 b1 
a1 b2 
a2 b2 
a3 b2 
a4 b2 
a1 b3 
a2 b3 
a3 b3 
a4 b3 

Inscrivez-enregistrement par enregistrement:

1 a1 b1 
2 a2 b2 
3 a3 b3 
4 a4 NULL