【发布时间】:2012-12-05 13:12:53
【问题描述】:
我的表格包含这样的用户:
user_id | status
----------------
1 | 1
2 | 2
3 | 1
4 | 1
包含订单的表格
order_id | user_id | status
---------------------------
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
4 | 2 | 1
5 | 3 | 1
以及包含订购产品的表格
order_id | cash
----------------
1 | 10
1 | 20
1 | 10
2 | 10
3 | 10
3 | 10
我需要选择的是所有状态为 1 且只有一个订单且该订单的状态必须为 1 且该订单的所有产品总和必须 >=30 的用户。
所以对于上述数据查询应该只返回 id=1 的用户
我已经设法编写了选择过程,但它运行不快:
SELECT user_id
FROM users US
WHERE status = 1
AND (SELECT Count(*)
FROM orders ORD
WHERE ORD.user_id = US.user_id) = 1
AND (SELECT Count(*)
FROM orders ORD
WHERE ORD.user_id = US.user_id
AND ORD.status = 1) = 1
AND (SELECT Sum(PRO.cash)
FROM products PRO
JOIN orders ORD
ON PRO.order_id = ORD.order_id
WHERE ORD.user_id = US.user_id) > 30
我想稍微改进一下,这样我就不必使用太多内部选择了
【问题讨论】:
标签: sql tsql sql-server-2005