Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/10/2011, 15h15   #1
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 :
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 !!!
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 15h31   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 15h47   #3
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour,

Code :
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.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h03   #4
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 :
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)
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h15   #5
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 697
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 697
Points : 837
Points : 837
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 :
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
)
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h20   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h39   #7
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
En relisant, plusieurs choses me paraissent erronées :

Citation:
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 :
Citation:
bsc.msc
Citation:
Code :
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 :
CREATE VIEW Arantech_NodeB_View (cell, mcc, mnc, lac, cid, bsc, msc, type, lat, lon, nodeB)
correspond bien à la donnée :

Code :
V_RFCFG_UMTS_UTRANCELL.nodeb
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h46   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
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 !
Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 16h51   #9
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

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

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
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.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 17h12   #10
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 :
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...
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 21h49   #11
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2011, 21h58   #12
Nouveau Membre du Club
 
Inscription : décembre 2007
Messages : 84
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 84
Points : 37
Points : 37
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 !
Geoffrey49000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h10.


 
 
 
 
Partenaires

Hébergement Web