Bonjour,
Je vous soumet une question qui me turlupine....
Tout d'abord voici la structure des 2 tables incriminées
DISPODATE donne la disponibilité d'une semaine type (pour tous les postes), et dans DISPOPOSTE on retrouve des exceptions pour chaque poste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 DISPODATE DDATE datetime not null, DDISPO tinyint not null DISPOPOSTE PDATE datetime not null, POSTE int not null, PDISPO tinyint not null
voici un jeu d'essai
On remarque que sur le poste 1 la disponibilité est différente de celle de la semaine type le 18 juin
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 DISPODATE DDATE DDISPO Jun 16 2008 12:00AM 2 Jun 17 2008 12:00AM 2 Jun 18 2008 12:00AM 2 Jun 19 2008 12:00AM 2 Jun 20 2008 12:00AM 3 Jun 21 2008 12:00AM 0 Jun 22 2008 12:00AM 0 DISPOPOSTE PDATE PDISPO POSTE Jun 18 2008 12:00AM 1 1
J'ai trouvé dans le produit sur lequel je travail la requête suivante :
La requête est réécrite en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 select DDATE, DDISPO from DISPODATE,DISPOPOSTE where DDATE*=PDATE and POSTE=1 resultat : Jun 16 2008 12:00AM | Jun 17 2008 12:00AM | Jun 18 2008 12:00AM | 1 Jun 19 2008 12:00AM | Jun 20 2008 12:00AM | Jun 21 2008 12:00AM | Jun 22 2008 12:00AM |
Je suis tout a fait d'accord avec le résultat retourné par la 2° écriture (jointure sur les dates et restriction sur le poste)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 select DDATE, DDISPO from DISPODATE left join DISPOPOSTE on DDATE=PDATE where POSTE=1 avec ce resultat Jun 18 2008 12:00AM | 1
Par contre, il me semblait que la requête 2 était une traduction fidèle de la 1.
Maintenant mes interrogations...
Qu'est ce qui change entre ces 2 écritures ?
Pourquoi la restriction n'est pas valable dans la requête 1 ?
Qu'elle serait alors la traduction de la requête 1 ?
PS : SGBD utilisé = Sybase ASE 12.5
Partager