Maison > Questions et réponses > le corps du texte
P粉6701076612023-08-25 17:20:32
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粉6623617402023-08-25 15:53:13
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