ผมมีผู้ปกครองโต๊ะ 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
โต๊ะสองครั้ง ฉันกำลังพยายาม the result will be artificially smoothed to hide jpeg artefacts กับการค้นหาและตามหาหนทางที่จะประสบความสำเร็จให้ได้ผลลัพธ์ตามที่คาดหวังโดยการใช้ Jobs
โต๊ะเพียงครั้งเดียวถ้าเป็นไปได้ มีอีกทางออกเป็นเกียรติอย่างยิ่ง ฉันสามารถเปลี่ยนแปลงโต๊ะรูปแบบชุดสีถ้าต้องการ.
งานโต๊ะเกือบจะ 20M นวนแถวและบางครั้งการแสดงที่น่าสงสารการแสดง. (ใช่พวกเรามองไปที่ indexes). ฉันคิดว่ามันกำลังค้นงานนั่งโต๊ะสองครั้งเนื่องจากการแสดงเหมือนไม่มีปัญหาอยู่เลยสินะ
ID
ประเภทน int ได้. แค่สำหรับความเข้าใจตั้งใจฉันเก็บมันเป็น nvarchar