Algèbre relationnel
Résolu/Fermé
MEFTAH
Messages postés
16
Date d'inscription
mercredi 24 octobre 2001
Statut
Membre
Dernière intervention
3 mars 2023
-
Modifié par MEFTAH le 26/01/2015 à 00:54
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 - 26 janv. 2015 à 15:39
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 - 26 janv. 2015 à 15:39
A voir également:
- Ora-00920: opérateur relationnel non valide
- Ethernet n'a pas de configuration ip valide - Guide
- Ora-12560: tns : erreur d'adaptateur de protocole - Forum Logiciels
- Ora-00911 ✓ - Forum Bases de données
- Erreur automation référence future non valide ✓ - Forum Word
- 0644 quel opérateur ✓ - Forum Mobile
2 réponses
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
26 janv. 2015 à 10:04
26 janv. 2015 à 10:04
Bonjour,
Avec une jointure .....
Un truc du genre :
Avec une jointure .....
Un truc du genre :
SELECT E.Code_Article, E.Quantite as Qte_entree, S.Quantite as Qte_sortie FROM Qt_Entrée E LEFT JOIN Qt_Sortie S ON S.Code_Article = E.Code_Article
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
281
Modifié par flokocha le 26/01/2015 à 10:29
Modifié par flokocha le 26/01/2015 à 10:29
Salut,
Une jointure utilisant un LEFT JOIN ne pourrait pas produire la ligne numéro 3 de son résultat donné en exemple.
Étant donné qu'on veut retourner les résultats des deux tables, indépendamment du fait qu'ils soient présents dans l'une ou dans l'autre ce ces tables, il faut utiliser un FULL OUTER JOIN.
Ce qui donnerait donc (avec l'utilisation de la fonction IFNULL() pour afficher 0 au lieu de null dans le cas où une entrée n'existe pas dans une des deux tables) :
Une jointure utilisant un LEFT JOIN ne pourrait pas produire la ligne numéro 3 de son résultat donné en exemple.
Étant donné qu'on veut retourner les résultats des deux tables, indépendamment du fait qu'ils soient présents dans l'une ou dans l'autre ce ces tables, il faut utiliser un FULL OUTER JOIN.
Ce qui donnerait donc (avec l'utilisation de la fonction IFNULL() pour afficher 0 au lieu de null dans le cas où une entrée n'existe pas dans une des deux tables) :
SELECT Code_Article, IFNULL(E.Quantite, 0) as Qte_entree, IFNULL(S.Quantite, 0) as Qte_sortie FROM Qt_Entrée E FULL OUTER JOIN Qt_Sortie S USING(Code_Article)
MEFTAH
Messages postés
16
Date d'inscription
mercredi 24 octobre 2001
Statut
Membre
Dernière intervention
3 mars 2023
Modifié par MEFTAH le 26/01/2015 à 12:30
Modifié par MEFTAH le 26/01/2015 à 12:30
Merci de votre patience
Pouvez vous m'expliquer brièvement le principe de FULL OUTER JOIN
Et encor une fois MERCI.
Pouvez vous m'expliquer brièvement le principe de FULL OUTER JOIN
Et encor une fois MERCI.
MEFTAH
Messages postés
16
Date d'inscription
mercredi 24 octobre 2001
Statut
Membre
Dernière intervention
3 mars 2023
26 janv. 2015 à 12:37
26 janv. 2015 à 12:37
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FULL OUTER JOIN Sorties2 S USING(Code_Article) LIMIT 0, 30' at line 3
Voici l'erreur
FULL OUTER JOIN est elle supportée par MySQL
Voici l'erreur
FULL OUTER JOIN est elle supportée par MySQL
MEFTAH
Messages postés
16
Date d'inscription
mercredi 24 octobre 2001
Statut
Membre
Dernière intervention
3 mars 2023
26 janv. 2015 à 12:50
26 janv. 2015 à 12:50
En plus j'ai besoin d'un GROUP BY pour les code_article dans le cas ou j'ai plusieurs entrées ou plusieurs sorties
MEFTAH
Messages postés
16
Date d'inscription
mercredi 24 octobre 2001
Statut
Membre
Dernière intervention
3 mars 2023
26 janv. 2015 à 13:12
26 janv. 2015 à 13:12
En effet j'ai tester avec MySQL
Il reconnai LEFT OUTER JOIN et RIGHT OUTER JOIN
mais pas FULL OUTER JOIN
Des Suggéssion SVP ?
Il reconnai LEFT OUTER JOIN et RIGHT OUTER JOIN
mais pas FULL OUTER JOIN
Des Suggéssion SVP ?
flokocha
Messages postés
1510
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
281
Modifié par flokocha le 26/01/2015 à 13:49
Modifié par flokocha le 26/01/2015 à 13:49
Ok au temps pour moi !
Dans ce cas il va falloir simuler le mode de fonctionnement de ce FULL OUTER JOIN qu'on ne peut pas utiliser. Le fait qu'il puisse y avoir plusieurs entrées dans une tables pour un même article va aussi changer un peu les choses en nous obligeant à calculer préalablement la somme pour chaque article dans chacune des deux tables.
Je te propose donc de procéder comme ceci :
- Calculer la somme des entrées de chaque article > E
- Calculer la somme des sorties de chaque article > S
- Récupérer les valeurs pour les articles présents dans E et S
- Récupérer les valeurs pour les articles présents dans E mais pas dans S
- Récupérer les valeurs pour les articles présents dans S mais pas dans E
- Faire l'union de ces 3 requêtes
Ce qui donne :
Dans ce cas il va falloir simuler le mode de fonctionnement de ce FULL OUTER JOIN qu'on ne peut pas utiliser. Le fait qu'il puisse y avoir plusieurs entrées dans une tables pour un même article va aussi changer un peu les choses en nous obligeant à calculer préalablement la somme pour chaque article dans chacune des deux tables.
Je te propose donc de procéder comme ceci :
- Calculer la somme des entrées de chaque article > E
- Calculer la somme des sorties de chaque article > S
- Récupérer les valeurs pour les articles présents dans E et S
- Récupérer les valeurs pour les articles présents dans E mais pas dans S
- Récupérer les valeurs pour les articles présents dans S mais pas dans E
- Faire l'union de ces 3 requêtes
Ce qui donne :
SELECT Code_Article, E.Q AS EQ, S.Q AS SQ FROM (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Entrees GROUP BY 1) AS E INNER JOIN (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Sorties GROUP BY 1) AS S USING(Code_Article) UNION SELECT Code_Article, E.Q AS EQ, 0 AS SQ FROM (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Entrees GROUP BY 1) AS E LEFT JOIN (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Sorties GROUP BY 1) AS S USING(Code_Article) WHERE S.Code_Article IS NULL UNION SELECT Code_Article, 0 AS EQ, S.Q AS SQ FROM (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Entrees GROUP BY 1) AS E RIGHT JOIN (SELECT Code_Article, SUM(Quantite) AS Q FROM Les_Sorties GROUP BY 1) AS S USING(Code_Article) WHERE E.Code_Article IS NULL ORDER BY Code_Article