मैं एक माता पिता की मेज Orders
और एक बच्चे की मेज Jobs
निम्न नमूना डेटा
मैं करने के लिए चाहते हैं का चयन करें आदेश के आधार पर निम्न आवश्यकताओं
1>प्रत्येक आदेश के लिए वहाँ हो सकता है 0 या अधिक नौकरियों. का चयन नहीं करते आदेश अगर यह नहीं करता है किसी भी काम किया है.
2>एक उपयोगकर्ता नहीं कर सकते काम पर अधिक से अधिक एक नौकरी के अंतर्गत आता है कि एक ही क्रम में ।
उदाहरण के लिए उपयोगकर्ता 1
पर काम नहीं कर सकता है कि नौकरियों के अंतर्गत आता है ऑर्डर करने के लिए 1 और 2 क्योंकि वह पहले से ही नौकरियों पर काम 1
और 4
से एक ही आदेश है.
3>केवल आदेश का चयन किया है कि नौकरियों में Requested
स्थिति
मैं निम्न क्वेरी देता है कि मुझे उम्मीद परिणाम
DECLARE @UserID INT = 2
SELECT O.OrderID
FROM Orders O
JOIN Jobs J ON J.OrderID = O.OrderID
WHERE
J.JobStatus = 'Requested' AND
NOT EXISTS
(
--Must not have worked this Order
SELECT 1 FROM Jobs J1
WHERE J1.OrderID = O.OrderID AND J1.UserID = @UserID
)
Group By o.OrderID
क्वेरी में मिलती है Jobs
तालिका में दो बार. मैं कोशिश कर रहा हूँ का अनुकूलन करने के लिए क्वेरी और एक रास्ते की तलाश को प्राप्त करने के लिए उम्मीद परिणाम का उपयोग करके Jobs
तालिका में केवल एक बार यदि संभव हो तो. किसी भी अन्य समाधान की भी सराहना की है. मैं बदल सकते हैं तालिका स्कीमा यदि आवश्यक हो.
नौकरियों तालिका में लगभग 20 मीटर पंक्तियों और कुछ समय क्वेरी खराब प्रदर्शन से पता चलता है. (हाँ, हम पर देखा अनुक्रमित). मुझे लगता है कि इसकी स्कैनिंग नौकरियाँ टेबल पर दो बार प्रदर्शन समस्या पैदा कर रहा.
ID
int प्रकार के. बस समझने के लिए उद्देश्य मैं रखा यह के रूप में nvarchar