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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    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

  3. #3
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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
    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
    ;

  4. #4
    Membre confirmé
    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
    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 Expert
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    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
    )

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    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, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    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
    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

+ 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