SQL a été inventé dans les années 1970 et amélioré par la suite.
Pendant 20 ans on ne pouvait l'utiliser que dans les laboratoires d'IBM, car la quantité de mémoire et la puissance CPU nécessaires à son fonctionnement étaient trop importants pour qu'une entreprise puisse acquérir le matériel nécessaire.
A partir du moment où le coût des machines est devenu raisonnable, cette techno s'est rapidement généralisée.
A cette époque, je ne développais plus beaucoup moi même, je n'ai donc pas de pratique.
Je me fie à un bouquin qui a l'air d'être sérieux et reprend le cours de Chantal Gribaumont sur OpenClassroom et pour le peu que j'en ai à faire cela me suffit.
Je suppose qu'il doit exister plusieurs dialectes.
J'ai fini par contourner le problème et voici la requête qui marche (dans son contexte, donc c'est beaucoup plus long)
SELECT DISTINCT
p.progID,
p.title AS programTitle,
p.plannedDate AS programDate,
p.comments AS programComments,
pi.rank AS rank,
pi.authorID,
pi.workID,
IF(pi.title IS NULL, w.title, pi.title) AS title,
w2.title AS mainWorkTitle,
IF(pi.solo IS NULL AND pi.choir IS NULL AND pi.instrument IS NULL, w.solo, pi.solo) AS solo,
IF(pi.solo IS NULL AND pi.choir IS NULL AND pi.instrument IS NULL, w.choir, pi.choir) AS choir,
IF(pi.solo IS NULL AND pi.choir IS NULL AND pi.instrument IS NULL, w.instrument, pi.instrument) AS instrument,
pi.comments AS comments,
w.mvtNum
FROM ProgItems AS pi
LEFT JOIN Works AS w
ON w.authorID = pi.authorID AND w.workID = pi.workID AND w.mvtID = pi.mvtID
LEFT OUTER JOIN Works as w2
ON (w2.authorID = w.authorID AND w2.workID = w.workID AND w2.mvtNum = 0)
JOIN Programs AS p
ON p.progID = pi.progID
WHERE
pi.progID in ($PROGLIST)
ORDER BY p.plannedDate DESC, pi.rank
LIMIT 10000
;
On remarque que la syntaxe a bien l'air d'être "variable IS NULL". Je suppose que "ISNULL(variable)" doit aussi bien fonctionner, mais je trouve déjà assez pénible d'apprendre les bases d'un dialecte sans me familiariser avec les autres si je n'en ai pas besoin.
J'ai vu également dans ce bouquin p 343
IF condition
THEN instructions
[ELSEIF instructions2 THEN ...]
[ELSEIF instructions3 THEN ...]
[ELSE instructions]
END IF
mais cela ne doit fonctionner que dans un contexte particulier, il faudra que je regarde cela de près, j'espère que quelqu'un pourra me donner des instructions sur l'utilisation de cette syntaxe.
En attendant la syntaxe
IF(condition, variable1, variable2)
donne le résultat espéré.
Je trouve tout que même que répéter 3 fois la condition (une fois par variable) est un peu lourd, mais comme ça marche, je m'en contenterai.
Si j'ai besoin de faire ça pour 25 variables, il faudra que j'améliore mes compétences.
Modifié par PapyJP (06 Jul 2020 - 22:52)