IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Créer une vue avec un UNION ALL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut Créer une vue avec un UNION ALL
    Bonjour, je souhaiterais créer une vue en faisant une union entre deux SELECT. Auriez vous une idée de comment s'y prendre ? Je pensais faire un truc comme ça...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
    AS (SELECT 
    internal_cell.cell,
    internal_cell.mcc,
    internal_cell.mnc,
    internal_cell.lac,
    internal_cell.ci,
    internal_cell.bsc,
    bsc.msc,
    RadioEng_ERP_SiteInfo.SiteType,
    RadioEng_ERP_SiteInfo.LATITUDEREAL_NAD83,
    RadioEng_ERP_SiteInfo.LONGITUDEREAL_NAD83
    FROM internal_cell, RadioEng_ERP_SiteInfo
    WHERE internal_cell.cell = RadioEng_ERP_SectorInfo.sectorname)
     
    UNION ALL
     
    (SELECT 
    V_RFCFG_UMTS_UTRANCELL.nodeb
    FROM RadioEng_ERP_SectorInfo, V_RFCFG_UMTS_UTRANCELL
    WHERE RadioEng_ERP_SectorInfo.erp_id = RadioEng_ERP_SiteInfo.erp_id
    AND V_RFCFG_UMTS_UTRANCELL.cellid = RadioEng_ERP_SectorInfo.sectorname)
    Merci beaucoup pour votre aide !!!

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    bonjour

    Ta requête ne peut pas fonctionner. Il faut impérativement que le nombre de colonnes des deux requêtes de l'UNION soient identiques.
    Dans la 2eme requête, ajoute de colonnes NULL afin d'atteindre le nombre de colonnes de la première requête.

    Attention aussi aux parenthèses
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
    AS 
    SELECT 
           internal_cell.cell              
    ,      internal_cell.mcc               
    ,      internal_cell.mnc               
    ,      internal_cell.lac               
    ,      internal_cell.ci                
    ,      internal_cell.bsc               
    ,      bsc.msc                         
    ,      RadioEng_ERP_SiteInfo.SiteType  
    ,      RadioEng_ERP_SiteInfo.LATITUDEREAL_NAD83
    ,      RadioEng_ERP_SiteInfo.LONGITUDEREAL_NAD83
    ,      V_RFCFG_UMTS_UTRANCELL.nodeb
    FROM            internal_cell 
         INNER JOIN RadioEng_ERP_SiteInfo  ON internal_cell.cell = RadioEng_ERP_SectorInfo.sectorname
         INNER JOIN V_RFCFG_UMTS_UTRANCELL ON V_RFCFG_UMTS_UTRANCELL.cellid = RadioEng_ERP_SectorInfo.sectorname
    ;
    Cordialement.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Merci beaucoup pour vos réponses !
    Je m'excuse ORA-007 mais je ne comprend pas trop le code que tu as mis...

    J'ai fait des modifications et j'obtiens ça, quels sont les choses qui ne vont pas ? Merci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
    AS (SELECT 
    internal_cell.cell,
    internal_cell.mcc,
    internal_cell.mnc,
    internal_cell.lac,
    internal_cell.ci,
    internal_cell.bsc,
    bsc.msc,
    RadioEng_ERP_SiteInfo.SiteType,
    RadioEng_ERP_SiteInfo.LATITUDEREAL_NAD83,
    RadioEng_ERP_SiteInfo.LONGITUDEREAL_NAD83,
    "---"
    FROM internal_cell, RadioEng_ERP_SiteInfo
    WHERE RadioEng_ERP_SiteInfo.EMG = RadioEng_ERP_SectorInfo.EMG
     
    UNION ALL
     
    (SELECT 
    cellid,
    mcc,
    mnc,
    un_lac,
    un_cId as CId,
    "bsc",
    msc,
    "SiteType",
    RadioEng_ERP_SiteInfo.LATITUDEREAL_NAD83,
    RadioEng_ERP_SiteInfo.LONGITUDEREAL_NAD83,
    V_RFCFG_UMTS_UTRANCELL.nodeb
    FROM rfcfg.V_RFCFG_UMTS_UTranCell,rfcfg.V_RFCFG_UMTS_RncFunction, rfcfg.UMTSNodeB
    WHERE
    ES_ADMINISTRATIVESTATE = 1
    AND V_RFCFG_UMTS_UTranCell.rncId = V_RFCFG_UMTS_RncFunction.UserLabel
    AND V_RFCFG_UMTS_RncFunction.Userlabel = UMTSNodeB.RNC
    AND RadioEng_ERP_SiteInfo.EMG = RadioEng_ERP_SectorInfo.EMG
    AND V_RFCFG_UMTS_UTRANCELL.cellid = RadioEng_ERP_SectorInfo.sectorname)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    est ce qu'elle fonctionne ?

    Ce serait bien d'utiliser la norme 92 pour les jointures

    Il faut aussi que les types de colonnes soient identiques entre les 2 select (à vérifier)

    attention aux parenthèses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
    AS (SELECT .....
    
    UNION ALL
    (SELECT ...   -- pas de parenthèse
    )
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Comme ORA-007, je ne suis pas sûr que tu aies besoin d'un UNION ALL mais plutôt d'une jointure supplémentaire avec la table V_RFCFG_UMTS_UTRANCELL puisque tu ne fais qu'ajouter aux colonnes de la première requête une colonne de cette dernière table dans ta deuxième requête.

    Au passage, les jointures s'écrivent depuis 1992 avec l'opérateur JOIN ; il serait temps de s'y mettre !

    Et avec l'utilisation d'alias, ta requête serait plus agréable à lire. Tu te rendrais ainsi compte que la table "bsc" n'existe pas dans ta requête !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB) 
    AS 
    SELECT 
        c.cell, 
        c.mcc, 
        c.mnc, 
        c.lac, 
        c.ci, 
        c.bsc, 
        bsc.msc, -- provient de quelle table ? 
        s.SiteType, 
        s.LATITUDEREAL_NAD83, 
        s.LONGITUDEREAL_NAD83, 
        u.nodeb 
    FROM internal_cell c 
    INNER JOIN RadioEng_ERP_SiteInfo s ON c.cell = s.sectorname 
        INNER JOIN V_RFCFG_UMTS_UTRANCELL u ON u.cellid = s.sectorname
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    En relisant, plusieurs choses me paraissent erronées :

    FROM internal_cell, RadioEng_ERP_SiteInfo
    WHERE internal_cell.cell = RadioEng_ERP_SectorInfo.sectorname
    => RadioEng_ERP_SiteInfo <> RadioEng_ERP_SectorInfo

    D'ou provient la donnée :
    bsc.msc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    FROM rfcfg.V_RFCFG_UMTS_UTranCell,
         rfcfg.V_RFCFG_UMTS_RncFunction, 
         rfcfg.UMTSNodeB
    WHERE
    ES_ADMINISTRATIVESTATE = 1
    AND V_RFCFG_UMTS_UTranCell.rncId = V_RFCFG_UMTS_RncFunction.UserLabel
    AND V_RFCFG_UMTS_RncFunction.Userlabel = UMTSNodeB.RNC
    AND RadioEng_ERP_SiteInfo.EMG = RadioEng_ERP_SectorInfo.EMG
    AND V_RFCFG_UMTS_UTRANCELL.cellid = RadioEng_ERP_SectorInfo.sectorname
    Il manque dans la clause from les décalaration des tables suivantes :

    RadioEng_ERP_SiteInfo
    RadioEng_ERP_SectorInfo
    V_RFCFG_UMTS_UTRANCELL


    Je ne pense pas que tu as besoin de faire un UNION si ton besoin est de rajouter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
    correspond bien à la donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    V_RFCFG_UMTS_UTRANCELL.nodeb
    Cordialement.

  8. #8
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    J'avais simplement récrit la première requête; Apparemment, il a changé des trucs dans la seconde.
    En plus sans les alias c'est tellement peu lisible que je n'ai peut-être pas vu qu'il y avait des petites différences entre les noms des tables préfixant les noms de colonnes.

    S'il nous disait plus concrètement quel est son besoin, on pourrait trouver la solution la plus adaptée parce qu'ajouter juste une colonne avec un UNION ALL, ça va donner un résultat bizarre !
    les colonnes de la première requête / la colonne de la deuxième requête
    des valeurs / NULL
    des valeurs / NULL
    des valeurs / NULL
    NULL / une valeur
    NULL / une valeur
    NULL / une valeur
    Je ne vois pas trop l'intérêt de la chose !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  9. #9
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Points : 263
    Points
    263
    Par défaut
    C'est quoi déjà le proverbe ?

    "Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."



    PS : J'avais pas vu mais en fait tu l'as déjà mise dans ta signature CinePhil
    Cordialement.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Bon ok j'avoue je suis vraiment pas clair depuis le début et ma premiere requete n'avait aucun sens...
    Je vais reprendre le truc plus clairement, je dois créer une vue permettant de lire les valeurs de deux SELECT et les mettre a la suite.
    Voila ce que j'obtiens présentement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    CREATE VIEW V_Test (cell, mcc, mnc, lac, cid, bsc, msc, types, lat, lon, nodeB)
    AS (SELECT 
    I.cell,
    I.mcc,
    I.mnc,
    I.lac,
    I.ci,
    I.bsc,
    B.msc,
    C.site,
    RSite.LATITUDEREAL_NAD83,
    RSite.LONGITUDEREAL_NAD83,
    '---'
    FROM internal_cell I, RadioEng_ERP_SiteInfo RSector, bsc B, cna_cell_sites_view C, RadioEng_ERP_SectorInfo RSite
    WHERE
    I.cell = C.cell
    and B.bsc = I.bsc
    and B.configuration = 0
    and I.configuration = 0
    and RSector.sectorname = I.cell
    and RSite.ERP_ID = RSector.ERP_ID
     
    UNION ALL
     
    SELECT 
    U.cellid,
    V.mcc,
    V.mnc,
    U.un_lac,
    U.un_cId,
    'bsc',
    U.msc,
    'SiteType',
    RSite.LATITUDEREAL_NAD83,
    RSite.LONGITUDEREAL_NAD83,
    V.nodeb
    FROM rfcfg.V_RFCFG_UMTS_UTranCell U,rfcfg.V_RFCFG_UMTS_RncFunction V, rfcfg.UMTSNodeB B, RadioEng_ERP_SiteInfo RSite, RadioEng_ERP_SectorInfo RSector
    WHERE
    ES_ADMINISTRATIVESTATE = 1
    AND U.rncId = V.UserLabel
    AND V.Userlabel = B.RNC
    AND RSite.ERP_ID = RSector.ERP_ID
    AND U.cellid = RSector.sectorname)
    Est ce un peu plus clair ? Désolé comme vous le voyez je débute vraiment...

  11. #11
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Apparemment, tu n'as pas dû lire la phrase en bleu de ma signature, répétée en noir par ORA-007 !

    En termes clairs et concis, quel est ton besoin ? Pourquoi veux-tu faire une union entre ces deux requêtes ? Qu'attends-tu comme résultat ?

    Récrite avec les jointures normalisées depuis 1992 et indentée correctement, ta requête est un peu plus facile à lire et semble syntaxiquement juste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    CREATE VIEW V_Test (cell, mcc, mnc, lac, cid, bsc, msc, types, lat, lon, nodeB)
    AS (
    SELECT 
        I.cell,
        I.mcc,
        I.mnc,
        I.lac,
        I.ci,
        I.bsc,
        B.msc,
        C.site,
        RSite.LATITUDEREAL_NAD83,
        RSite.LONGITUDEREAL_NAD83,
        '---'
    FROM internal_cell I
    INNER JOIN RadioEng_ERP_SiteInfo RSector ON RSector.sectorname = I.cell
        INNER JOIN RadioEng_ERP_SectorInfo RSite ON RSite.ERP_ID = RSector.ERP_ID
    INNER JOIN cna_cell_sites_view C ON I.cell = C.cell
        INNER JOIN bsc B ON B.bsc = I.bsc
    WHERE B.configuration = 0
        AND I.configuration = 0
     
    UNION ALL
     
    SELECT 
        U.cellid,
        V.mcc,
        V.mnc,
        U.un_lac,
        U.un_cId,
        'bsc',
        U.msc,
        'SiteType',
        RSite.LATITUDEREAL_NAD83,
        RSite.LONGITUDEREAL_NAD83,
        V.nodeb
    FROM rfcfg.V_RFCFG_UMTS_UTranCell U
    INNER JOIN rfcfg.V_RFCFG_UMTS_RncFunction V ON U.rncId = V.UserLabel
        INNER JOIN rfcfg.UMTSNodeB B ON V.Userlabel = B.RNC
    INNER JOIN RadioEng_ERP_SiteInfo RSite ON U.cellid = RSector.sectorname
        INNER JOIN RadioEng_ERP_SectorInfo RSector ON RSite.ERP_ID = RSector.ERP_ID
    WHERE ES_ADMINISTRATIVESTATE = 1
    )
    Elle te donne le résultat que tu souhaites ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 84
    Points : 69
    Points
    69
    Par défaut
    Oui c'est parfait ça fonctionne !

    Désolé pour la normalisation je l'avais bien lu mais je devais faire cette vue un peu dans l'urgence... maintenant que c'est fait je vais pouvoir regarder plus attentivement cette autre façon de l'écrire !

    Merci beaucoup pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une vue avec une image au format postscript *.eps
    Par pobsteta dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 22/11/2007, 15h12
  2. Impossible de créer une vue avec un champ spatial
    Par M Roncheau dans le forum SQL
    Réponses: 2
    Dernier message: 24/08/2007, 09h11
  3. Créer une vue avec des onglets
    Par Flackou dans le forum MFC
    Réponses: 2
    Dernier message: 14/06/2007, 11h43
  4. Créer une vue avec du SQl dynamique
    Par gghonang2 dans le forum Oracle
    Réponses: 15
    Dernier message: 06/09/2006, 22h03
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo