[RESOLU] Jointure de 2 tables

Avatar du membre
Eléphant du PHP | 224 Messages

28 juil. 2023, 00:20

Bien le coucou :D

Je galère à trouver (je ne suis pas sur que ce soit faisable déjà lol), pour faire une jointure de table sur une requête SELECT.

Dans l'exemple suivant, les données sont bidons.
Une première table avec deux colonnes : ID , et marque :
ID marque
1 Rono
2 Peugo
3 Citron
4 BMDoublePieds
5 Taudi

Une deuxième table :
ID IDcaout IDmarque refmarque
99 1 1 Cr
412 1 5 cr
342 1 2 A-47451
3 1 4 R-15-4
407 2 5 FGTBJ
67 3 3 545-5024
90 3 1 131519
10 3 4 23-65194
352 3 2 23-6519-4
54 4 3 LBB
89 4 1 LBB
1 4 4 LBB
341 4 2 23-67327
391 4 5 LBB
34 5 4 LBN
76 5 3 LBN
107 5 1 LBN
368 5 2 LBN
La colonne ID ne commence pas à 1 car j'ai gardé que quelques données pour l'exemple.

Je voudrais sortir un tableau avec les 5 marques, et la refmarque correspondante en fonction de l'IDcaout , mai que s'il n'y a pas de refmarque correspondante à une marque, que la ligne apparaisse quand même mais avec des NULL (ou autre vide).
Par exemple pour l'IDcaout 3, je voudrais avoir ce résultat :
ID IDcaout 1 IDmarque marque refmarque
90 3 1 Rono 131519
352 3 2 Peugo 23-6519-4
67 3 3 Citron 545-5024
10 3 4 BMDoublePieds 23-65194
NULL NULL 5 Taudi NULL
Ma requête initiale :

Code : Tout sélectionner

SELECT list_compat_caout.ID, list_compat_caout.IDcaout, list_marques.ID as IDmarque, list_marques.marque, list_compat_caout.refmarque FROM list_marques LEFT JOIN list_compat_caout ON list_marques.ID = list_compat_caout.IDmarque WHERE list_compat_caout.IDcaout = 3 OR list_compat_caout.IDcaout IS NULL ORDER BY list_marques.ID ASC
En m'inspirant de https://datascientest.com/tout-comprend ... ntures-sql , J'ai tenté un FULL JOIN, mais là ça ne marche pas du tout (erreur #1054 - Champ 'list_marques.ID' inconnu dans field list ).

Si quelqu'un a une petite idée : :oops:

Merkouiinnnn :mrgreen:

Edit: Désolé pour les tables, les tabulations sont remplacées par des espaces par le forum et les alignements sont perdus :cry:
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Mammouth du PHP | 2615 Messages

28 juil. 2023, 00:22

on peut avoir la requête avec le full join ?

Avatar du membre
Eléphant du PHP | 224 Messages

28 juil. 2023, 01:02

J'ai dans un premier temps remplacé le LEFT par FULL, puis tous les champs du SELECT par * pour voir si ça donnait quelque chose, mais même erreur :(
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen:

Mammouth du PHP | 1957 Messages

29 juil. 2023, 11:53

Le problème vient du fait que tu fais la jointure avant de filtrer sur idcaout

avec un filtre avant la jointure, tu aura le résultat voulu
SELECT list_compat_caout_filtred.id, list_compat_caout_filtred.idcaout, list_marques.id as idmarque, list_marques.marque, list_compat_caout_filtred.refmarque
FROM list_marques
LEFT JOIN (SELECT * FROM list_compat_caout WHERE list_compat_caout.idcaout = 3 ) list_compat_caout_filtred ON list_marques.id = list_compat_caout_filtred.idmarque
ORDER BY list_marques.id ASC
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphant du PHP | 224 Messages

29 juil. 2023, 14:09

Hello !

Alors là, jamais je n'auras pensé à faire quelque chose comme ça, ni même su que c'était faisable !
Merci beaucoup, ça marche impec !!!

Bon week-end !
Le Couin
Un Couin vaut mieux que Deux tu couineras :D
Retrouvez-moi tous les dimanches soir à 22H pour un mix live au vinyle sur eurodance90.fr :mrgreen: