- Ymox,
Bonsoir,
Je suis toujours aussi pataud avec du SQL, donc je viens vers vous pour avoir de l’aide.
J’ai un jeu de données que je dois filtrer en fonction d’une valeur sur une autre table. Concrètement : j’ai une demande de désinscription à un magazine pour une publication qui est gérée dans un CRM ou un autre, et je dois les traiter séparément selon le CRM. Cette information est portée par une paire clé-valeur pour certains CRMs, mais cette paire n’existe pas du tout pour le CRM historique (il n’y a pas de clé avec une valeur nulle).
Les tables impliquées sont desinscription
en N-1 vers publication
, qui est en 1-N vers publication_config
où se trouvent les paires clé-valeur. La clé qui nous occupe est 'crm'
(valeur de la colonne key
).
Si je ne crois pas m’être trompé en effectuant des jointures internes avec "renforcement" sur la paire 'crm'
afin de sélectionner les désinscriptions pour les publications des CRMs les plus récents, je constate que je n’ai pas le bon raisonnement pour sélectionner celles du CRM historique.
Pour un CRM défini, j’ai cette requête :
SELECT *
FROM unsubscription c0_
INNER JOIN publication c1_
ON c0_.publication_id = c1_.id
INNER JOIN publication_config c2_
ON c1_.id = c2_.publication_id
AND ( c2_.name = 'crm'
AND c2_.value = ? )
Pour le vieux CRM, j’ai pensé à ceci :
SELECT *
FROM unsubscription c0_
LEFT JOIN publication c1_
ON c0_.publication_id = c1_.id
LEFT JOIN publication_config c2_
ON c1_.id = c2_.publication_id
AND ( c2_.name = 'crm' )
WHERE c2_.id IS NULL
Est-ce que quelqu’un pourrait m’expliquer ce qui ne va pas ?
Merci d’avance