Bonjour à tous,
Je suis un peu coincé avec une requète qui fonctionne, mais est horriblement lente...
Voici le Topo, j'ai une table Order, Status et Order_Status qui fait le lien entre les deux. Le but est d'assigner un ou plusieurs status à une commande, et de pouvoir ensuite faire une recherche des commandes qui comporte ou ne comporte pas tel et tel status.
Voici la requète:
Je ne sais pas si c'est le plus adapté, mais pour l'instant c'est le seul moyen que j'ai trouvé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 SELECT `o`.* FROM `Order` AS `o` WHERE ( EXISTS ( SELECT Order_Id FROM Order_Status AS os2 LEFT JOIN `Status` AS s2 ON os2.Status_Id = s2.Status_Id WHERE s2.Status_Const = 'STATUS1' AND o.Order_Id = os2.Order_Id ) ) AND ( EXISTS ( SELECT Order_Id FROM Order_Status AS os2 LEFT JOIN `Status` AS s2 ON os2.Status_Id = s2.Status_Id WHERE s2.Status_Const = 'STATUS2' AND o.Order_Id = os2.Order_Id ) ) AND ( NOT EXISTS ( SELECT Order_Id FROM Order_Status AS os2 LEFT JOIN `Status` AS s2 ON os2.Status_Id = s2.Status_Id WHERE s2.Status_Const = 'STATUS3' AND o.Order_Id = os2.Order_Id ) );
Si qqun à une idée pour optimiser ça, je suis preneur :
Merci,
Asfa
Partager