2011-05-11 5 views
0

Je dois tables dans ma base de données:SQL avancée requête

table1 
column1|column2|column5|column13 
harry marry stan kyle 

table2 
column1|column2|column12|column7 
kenny eric randy ike 

Comme vous pouvez le voir, il y a deux colonnes de chaque table avec le même nom et deux avec l'autre nom, je voudrais me joindre à ceux en un seul, voici la sortie que je veux atteindre

column1|column2|column5|column13|column12|column7 
harry marry stan kyle  null  null 
kenny eric null null  randy ike 

ou

column1|column2|column5|column12|column13|column7 
harry marry stan null  kyle  null 
kenny eric null randy null  ike 

est-ce possible? et comment? J'ai essayé quelque chose comme:

(select t1.column1 from table1 t1 union select t2.column1 from table t2) 

Mais je suis coincé ..

Répondre

6

Vous devriez être en mesure de le faire

SELECT t1.column1, 
     t1.column2, 
     t1.column5, 
     null column12, 
     t1.column13, 
     null column7 
    FROM table1 t1 
UNION ALL 
SELECT t2.column1, 
     t2.column2, 
     null column5, 
     t2.column12, 
     null column13, 
     t2.column7 
    FROM table2 t2 

Si le type de données (longueur notamment) est important, vous peut vouloir CAST(null as VARCHAR2(100)) plutôt que de simplement sélectionner une valeur NULL dans la première requête.

2

Consultez cette question précédente. On dirait que vous voulez faire un FULL OUTER JOIN malgré le fait que MySQL ne supporte pas cela directement. Il y a un moyen d'y parvenir cependant.

Full Outer Join in MySQL

+0

+1. Je n'avais aucune idée que FULL OUTER JOIN n'existait pas dans MySQL. –

2
select 
column1 as column1, 
column2 as column2, 
column5 as column5, 
column13 as column13, 
null as column12, 
null as column7 
from T1 
union 
select 
column1 as column1, 
column2 as column2, 
null as column5, 
null as column13, 
column12 as column12, 
column7 as column7 
from t2 
0

il ressemble à une simple union. mais je ne comprends pas ce que vous essayez de faire. Mais si vous obtenez ces résultats, vous pouvez essayer ce qui suit:

Je ne suis pas sûr de ce que la jointure entre les tables sont supposés être si je fait une hypothèse

Select table1.column1,table1.column2,column5,column13,column12,column7 
from 
(Select column1,column2,column5,column13,column12,column7 
from table1 
left join table2 on table1.column1 = table2.column1 

) 
union 
(
Select table1.column1,table1.column2,column5,column13,column12,column7 
from table2 
left join table1 on table1.column1 = table2.column1 
) 
0

Vous devez lister toutes les colonnes dont vous avez besoin à la sortie en conséquence.

select t1.c1, t1.c2, t1.c3, t1.c4, '' ,'' from t1 
union 
select t2.c1, t2.c2, '','' , t2.c7, t2.c8 from t2 

est ce travail?