我有一个母表 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类型。 只是为了了解目的,我保持它作为限