Union de deux tables avec un nombre de colonnes différent
P粉879517403
P粉879517403 2023-08-24 18:54:05
0
2
566
<p>J'ai deux tableaux (tableau A et tableau B). </p> <p>Les deux tableaux ont un nombre de colonnes différent - en supposant que le tableau A comporte plus de colonnes. </p> <p>Comment puis-je fusionner ces deux tables et obtenir des valeurs nulles sur les colonnes que la table B n'a pas ? </p>
P粉879517403
P粉879517403

répondre à tous(2)
P粉670107661

Je suis venu ici et j'ai suivi la réponse ci-dessus. Mais la différence d'ordre des types de données a entraîné une erreur. La description ci-dessous d'une autre réponse sera utile.

Les résultats ci-dessus sont-ils dans le même ordre que les colonnes de votre tableau ? Parce qu'Oracle est très strict sur l'ordre des colonnes. L'exemple suivant générera une erreur :

create table test1_1790 (
col_a varchar2(30),
col_b number,
col_c date);

create table test2_1790 (
col_a varchar2(30),
col_c date,
col_b number);

select * from test1_1790
union all
select * from test2_1790;

ORA-01790 : l'expression doit avoir le même type de données que l'expression correspondante

Comme vous pouvez le voir, la cause première de l'erreur réside dans la non-concordance de l'ordre des colonnes impliquée par l'utilisation de * comme spécificateur de liste de colonnes. Ce type d'erreur peut être facilement évité en saisissant explicitement la liste des colonnes :

sélectionnez col_a, col_b, col_c dans test1_1790 syndicat tous sélectionnez col_a, col_b, col_c dans test2_1790 ; Une situation plus courante pour cette erreur est lorsque vous échangez (ou déplacez) par inadvertance deux colonnes ou plus dans une liste SELECT :

select col_a, col_b, col_c from test1_1790
union all
select col_a, col_c, col_b from test2_1790;

Ou, si ce qui précède ne résout pas votre problème, que diriez-vous de créer un alias dans une colonne , comme ceci : (La requête est différente de la vôtre, mais le point ici est de savoir comment ajouter un alias dans une colonne.)

SELECT id_table_a, 
       desc_table_a, 
       table_b.id_user as iUserID, 
       table_c.field as iField
UNION
SELECT id_table_a, 
       desc_table_a, 
       table_c.id_user as iUserID, 
       table_c.field as iField
P粉662361740

Pour les tableaux avec moins de colonnes, vous pouvez ajouter des colonnes vides supplémentaires, par exemple :

Select Col1, Col2, Col3, Col4, Col5 from Table1
Union
Select Col1, Col2, Col3, Null as Col4, Null as Col5 from Table2
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal