Πρώτο post εδώ, οπότε ελπίζω να μην κάνω κάποια βλακεία ;-)
Έχω μια βάση σε access, και θέλω σε ένα combobox να εισάγω έναν αριθμό (που αντιστοιχεί σε μια παραγγελία) και δίπλα ένα θαυμαστικό αν η παραγγελία περιέχει τουλάχιστον ένα προοιόν με συγκεκριμένο κωδικό σε ένα πεδίο.
Επειδή μάλλον δεν καταλάβατε, οι πίνακες είναι (όχι όλα τα πεδία)
Orders: OrderID, OrderNumber
OrderDetails: OrderID, BarCodeID, Quantity
Barcode: BarcodeID, Code, Name, PackID
Θέλω να μου βγάζει το OrderNumber και ένα θαυμαστικό, αν στον OrderDetails για το εκάστοτε orderID υπάρχει τουλάχιστον ένα ProductID με PackID=1
Το χάσατε ή ακόμα εδώ;
Εννοείται ότι οι σχέσεις έχουν οριστεί σωστά.
Προς το παρόν ο τρόπος που έχω βρει, είναι αυτός:
| |
SELECT Orders.OrderCode, "" AS NoUnknown FROM Orders WHERE (((Orders.OrderCode) Not In (SELECT Orders.OrderCode FROM Orders INNER JOIN (BarCode INNER JOIN OrderDetails ON BarCode.BarCodeID = OrderDetails.BarCodeID) ON Orders.OrderID = OrderDetails.OrderID WHERE (((BarCode.PackID)=1)))))
UNION SELECT Orders.OrderCode, "!" AS HasUnknown FROM Orders WHERE (((Orders.OrderCode) In (SELECT Orders.OrderCode FROM Orders INNER JOIN (BarCode INNER JOIN OrderDetails ON BarCode.BarCodeID = OrderDetails.BarCodeID) ON Orders.OrderID = OrderDetails.OrderID WHERE (((BarCode.PackID)=1)))))
ORDER BY OrderCode; |
(Οι εξτρά παρενθέσεις έχουν μπει από την access)
Το παραπάνω, αν και δουλεύει, με έχει προβληματίσει ως προς το πόσο αποδοτικό είναι, όχι γιατί με καίει ιδιαίτερα, η βάση δεν πρόκειται να έχει σε πλήρη ανάπτυξη περισσότερες από 500 εγγραφές στον orderdetails και το πολύ 3000 στον barcodes, αλλά με ενοχλεί ότι ουσιαστικά τρέχω 2 φορές το ίδιο πράγμα (τη μια φορά βρίσκει αυτά που δεν περιέχουν και την άλλη αυτά που περιέχουν και μετά ενώνει τα αποτελέσματα). Σαν τεχνική δηλαδή δεν μου αρέσει και έχω σπάσει το κεφάλι μου πως μπορεί να γίνει καλύτερα...
Έχετε κάποια πρόταση;