Bonjour,

Je vous soumet une question qui me turlupine....
Tout d'abord voici la structure des 2 tables incriminées

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
DISPODATE donne la disponibilité d'une semaine type (pour tous les postes), et dans DISPOPOSTE on retrouve des exceptions pour chaque poste

voici un jeu d'essai
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
On remarque que sur le poste 1 la disponibilité est différente de celle de la semaine type le 18 juin


J'ai trouvé dans le produit sur lequel je travail la requête suivante :
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	|
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
select DDATE, DDISPO
from DISPODATE
left join DISPOPOSTE on DDATE=PDATE
where POSTE=1
 
avec ce resultat
 
Jun 18 2008 12:00AM	|  1
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)
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