Qu'est ce qui cloche dans ma requête SQL?

Qu'est ce qui cloche dans ma requête SQL? - SQL/NoSQL - Programmation

Marsh Posté le 03-08-2005 à 17:49:16    

Au niveau relation entre les données, on a :
- une livraison de matériel possède un champ texte (MatDeliveryMaterialList) contenant d'éventuels matos livrés
- à une livraison peut être associés des documents
- un document possède une réf interne (DocumentRef) et éventuellement une réf externe (ocumentExternalRef)
- la table MatDeliveriesDocuments fait la relation entre les livraisons et les documents
 
Voici ma requête SQL :

Code :
  1. SELECT DISTINCT md.MatDeliveryID FROM MatDeliveries md LEFT JOIN MatDeliveriesDocuments mdd ON (md.MatDeliveryID = mdd.MatDeliveryID) LEFT JOIN Documents d ON (mdd.DocumentID = d.DocumentID) WHERE ((md.MatDeliveryMaterialList LIKE "%04.0520D%" AND md.MatDeliveryMaterialList LIKE "%04.0519C%" ) OR (d.DocumentRef LIKE "%04.0520D%" AND d.DocumentRef LIKE "%04.0519C%" ) OR (d.DocumentExternalRef LIKE "%04.0520D%" AND d.DocumentExternalRef LIKE "%04.0519C%" ))


Dans ma table, j'ai 2 livraisons (pour tester), dont une à qui lui sont associés 2 documents ayant comme ref externe 04.0519C et 04.0520D. Pourtant, la requête ne trouve aucune livraison :( Par contre, si je remplace les AND par des OR, je trouve bien 2 fois la même livraison :??: Sauf que moi, je veux pouvoir trouver les livraisons qui possèdent les docs 04.0519C ET 04.0520D et non les docs 04.0519C OU 04.0520D... Vous voyez mon pb? Merci beaucoup par avance :jap:

Reply

Marsh Posté le 03-08-2005 à 17:49:16   

Reply

Marsh Posté le 04-08-2005 à 08:59:53    

normal, un meme champ ne peut avoir en meme temps 2 valeurs a moins que dans ce cas précis il ne soit un truc du genre 04.0519Cblabla04.0520D
un truc qui me vient en tete la (je passe la jointure)
 

Code :
  1. select distinct d.DocumentID from Documents d
  2. where (d.DocumentRef LIKE "%04.0520D%" OR d.DocumentRef LIKE "%04.0519C%"
  3.  OR d.DocumentExternalRef LIKE "%04.0520D%" OR d.DocumentExternalRef LIKE "%04.0519C%" )
  4. group by DocumentID
  5. having (count(distinct d.DocumentRef)=2) or (count(distinct d.DocumentExternalRef)=2);

Reply

Marsh Posté le 04-08-2005 à 09:31:54    

hum, effectivement, j'avais pas pensé à ça (le coup qu'un même champ 2 peut avoir 2 valeurs différentes). Je raisonnais par rapport à la table qui contenant les documents livrés lors d'une livraison ;or ma requête travaille sur les documents eux-mêmes :(
 
Merci de ton aide en tout cas.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed