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

SQL Oracle Discussion :

Jointure avec solutions vides


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 55
    Par défaut Jointure avec solutions vides
    Bonjour,

    J'ai un problème de jointure :

    Voici ma 1ère table (table1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DATE
    01/01/2023
    02/01/2023
    03/01/2023
    ...
    Et ma 2ème (table2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DATE     PRODUIT QUANTITE 
    01/01/2023     A     2
    02/01/2023     A     1
    02/01/2023     B     3
    03/01/2023     A     5
    03/01/2023     B     6
    Et ce à quoi j'aimerai arriver :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DATE     PRODUIT QUANTITE 
    01/01/2023     A     2
    01/01/2023     B     NULL
    02/01/2023     A     1
    02/01/2023     B     3
    03/01/2023     A     5
    03/01/2023     B     6
    Mais j'ai beau me creuser la tête je n'y arrive pas...

    Help !

    D'avance merci ;-)

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 430
    Par défaut
    Bonjour,
    Sans avoir de table qui liste les produits (donc sans notion de date), ça me semble difficile.

    Sinon en renommant les tables pour plus de clarté, ça donnerai une requête de ce genre:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select calendrier.ColDate, produit.Code,sum(vente.Quantite)
    from Calendrier
    cross join Article
    left outer join Vente
    on Vente.idCal = Calendrier.id and Vente.idPdt = Produit.id
    group by calendrier.ColDate, produit.Code

    Tu auras ainsi toutes les dates, tous les articles et pour chaque couple date/code article le cumul des ventes.

    Sans la table article, tu pourrais partir de la liste des codes présents dans la table des ventes, mais un article jamais vendu n'apparaitra pas.

    Tatayo.

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Ce que tu veux faire s'appelle une jointure externe partitionnée dans Oracle (ça n'existe pas dans les autres SGBD). Voici la syntaxe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select table1.date_evt, table2.produit, table2.quantite
    from table2
    partition by (produit)
    right join table1
    on (table1.date_evt = table2.date_evt)
    order by 1, 2;

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Simple comme bonjour en pur SQL :

    Soit les tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE TA (D DATE)
    INSERT INTO TA VALUES ('2023-01-01') , ('2023-01-02') , ('2023-01-03');
    CREATE TABLE TB (D DATE, PRODUIT VARCHAR(16), QUANTITE INT);
    INSERT INTO TB VALUES ('2023-01-01', 'A', 2) , 
                           ('2023-01-02', 'A', 1) , ('2023-01-02', 'B', 3) , 
                           ('2023-01-03', 'A', 5) , ('2023-01-03', 'B', 5);
    La solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT TA.D, T.PRODUIT, TB.QUANTITE
    FROM   TA
           CROSS JOIN (SELECT PRODUIT FROM TB) AS T
           LEFT OUTER JOIN TB
              ON TA.D = TB.D AND T.PRODUIT = TB.PRODUIT
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    C'est beaucoup moins performant que la jointure externe partitionnée.
    NB : dans le cross join il faut select distinct produit from tb.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Parlons en de l'optimiseur d'Oracle !!!!

    C'est donc du fait d'un défaut de l'optimiseur d'Oracle, que l'on ajoute une syntaxe inutile pour palier les défaut de ce SGBDR....

    Je doute que cela soit un jour normalisé !

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Je sèche: jointure avec champ vide
    Par xdeslandes dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/10/2013, 17h34
  2. [Toutes versions] Requête avec jointure et champ vide
    Par Mercusio dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/06/2013, 09h36
  3. Requête sql avec jointure et table vide (ou tuple nulle)
    Par Aenur56 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 29/04/2010, 14h10
  4. Probleme jointure avec champs vides
    Par wylls dans le forum Requêtes
    Réponses: 3
    Dernier message: 04/02/2008, 23h42
  5. [SAGE]Jointures avec SGBD
    Par mat.M dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 09/10/2003, 12h23

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