Dans le cours sur la gestion de temps de SQLPro, j'ai repris son algorythme pour pallier l'absence du prédicat Overlaps dans MySQL. En reprenant l'algorithme, j'ai vu qu'il ne fonctionnait pas. À force de chercher, j'ai trouvé une coquille dans son cours

Il est écrit :

((période1.borne_debut > période2.borne_debut
et (période1.borne_debut < période2.borne_debut ou période1.borne_fin < période2.borne_fin)) ou
(période2.borne_debut > période1.borne_debut
et (période2.borne_debut < période1.borne_fin ou période2.borne_fin < période1.borne_fin)) ou
(période1.borne_debut = période2.borne_debut et (période1.borne_fin NON NUL et période2.borne_fin NON NUL)
Il faut lire
((période1.borne_debut > période2.borne_debut
et (période1.borne_debut < période2.borne_fin ou période1.borne_fin < période2.borne_fin)) ou
(période2.borne_debut > période1.borne_debut
et (période2.borne_debut < période1.borne_fin ou période2.borne_fin < période1.borne_fin)) ou
(période1.borne_debut = période2.borne_debut et (période1.borne_fin NON NUL et période2.borne_fin NON NUL))
Dans la suite du cours, il écrit très justement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT *
FROM   PERIODE
WHERE  (P1_DEBUT > P2_DEBUT AND (P1_DEBUT < P2_FIN OR P1_FIN < P2_FIN)) OR
       (P2_DEBUT > P1_DEBUT AND (P2_DEBUT < P1_FIN OR P2_FIN < P1_FIN)) OR
       (P1_DEBUT = P2_DEBUT AND (P1_FIN IS NOT NULL AND P2_FIN IS NOT NULL))
C'est en comparant les deux expressions que j'ai découvert la coquille.

Voici l'emplacement du paragraphe :
http://sqlpro.developpez.com/cours/gestiontemps/#L1.2.2