Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 18/12/2007, 09h54   #1
Membre actif
 
Avatar de neuropathie
 
Inscription : janvier 2005
Messages : 210
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 210
Points : 154
Points : 154
Par défaut [DB2 sous MVS] Requête SQL

Bonjour, est ce que vous pourrez me corriger la syntaxe de cette requête, je ne sais pas si le cross join existe en DB2, ou bien qu'il faille le remplacer avec UNION?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
SELECT  lst.id_eqp
    ,   src.id_ctr
    ,   src.mod_paie
FROM    matable AS src -- 2
    CROSS JOIN  -- 1
        (   SELECT  id_eqp
            FROM    matable
            GROUP BY id_eqp 
        )   AS lst -- 3
WHERE   src.id_eqp  = 'F' -- 2
    AND NOT EXISTS -- 4
        (   SELECT  0
            FROM    matable AS ver
            WHERE   ver.id_eqp      = lst.id_eqp
                AND ver.id_ctr   = src.id_ctr
                AND ver.mod_paie     = src.mod_paie
        )
;
neuropathie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 20h42   #2
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 098
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 098
Points : 1 707
Points : 1 707
Citation:
Envoyé par neuropathie Voir le message
Bonjour, est ce que vous pourrez me corriger la syntaxe de cette requête, je ne sais pas si le cross join existe en DB2 ...
Désolé, mais le "CROSS JOIN" n'existe pas en DB2 for z/OS ...
Une jointure est soit INNER, LEFT, RIGHT ou FULL :
joined-table

Qu'est le "CROSS JOIN" d'ailleurs ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2007, 21h31   #3
Membre éclairé
 
Inscription : octobre 2007
Messages : 362
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 362
Points : 359
Points : 359
Citation:
Envoyé par neuropathie Voir le message
Bonjour, est ce que vous pourrez me corriger la syntaxe de cette requête, je ne sais pas si le cross join existe en DB2, ou bien qu'il faille le remplacer avec UNION?
Tout d'abord, nous avons la définition de la jointure croisée ici.

Par ailleurs, je vois au moins deux choses qui posent problème pour DB2 :

Citation:
Envoyé par neuropathie Voir le message

Code :
1
2
3
4
 
SELECT  id_eqp
            FROM    matable
            GROUP BY id_eqp
Pourquoi un GROUP BY sans agrégat ? N'est-ce pas plutôt :

Code :
1
2
3
 
SELECT  DISTINC id_eqp
            FROM    matable
Citation:
Envoyé par neuropathie Voir le message

Code :
1
2
3
4
5
6
7
8
 
    AND NOT EXISTS -- 4
        (   SELECT  0
            FROM    matable AS ver
            WHERE   ver.id_eqp      = lst.id_eqp
                AND ver.id_ctr   = src.id_ctr
                AND ver.mod_paie     = src.mod_paie
        )
Habituellement, on utilise un SELECT * pour un EXISTS (voir l'explication).

Au final, ceci devrait marcher :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
SELECT  lst.id_eqp
    ,   src.id_ctr
    ,   src.mod_paie
FROM    matable AS src, 
            (   SELECT  DISTINCT id_eqp
            FROM    matable
        )   AS lst 
WHERE   src.id_eqp  = 'F'
    AND NOT EXISTS -- 4
        (   SELECT  *
            FROM    matable AS ver
            WHERE   ver.id_eqp      = lst.id_eqp
                AND ver.id_ctr   = src.id_ctr
                AND ver.mod_paie     = src.mod_paie
        )
;
fremen167 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2007, 09h24   #4
Membre actif
 
Avatar de neuropathie
 
Inscription : janvier 2005
Messages : 210
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 210
Points : 154
Points : 154
Merci pour vos conseil,n au fait pour le cross join, j'ai remplacé par tout simplement une virgule. Maintenant ce que je veux faire c'est insérer le résultat de cette requête dans une table tout en ayant qu'une seule requête
neuropathie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h30.


 
 
 
 
Partenaires

Hébergement Web