recherche

Maison  >  Questions et réponses  >  le corps du texte

Union de deux tables avec un nombre de colonnes différent

<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粉879517403P粉879517403459 Il y a quelques jours546

répondre à tous(2)je répondrai

  • P粉670107661

    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

    répondre
    0
  • P粉662361740

    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

    répondre
    0
  • Annulerrépondre