避免单个表的嵌套子查询

时间:2013-07-09 12:53:30

标签: mysql sql

我有一张包含以下数据的表格。我有一些销售ID,可能/可能不会修改。如果它被修改,那么它将有修订号。如果SalesId被修改两次,那么它将具有版本号2。

SalesId和Revision是彼此w.r.t并且没有主键或外键

SalesId -100 100 100 101 102 102 103 104 104


Revision -0   1   2  0    0   1   0   0   1

我的要求是 - 如果用户给出一个版本号说'n',我需要获得所有revisions<=’n’的记录。

例如:

1.I want to know SalesId's which are not at all revised , means ‘n=0’. expected result : 101, 103

2.I want to know SalesIds which are revised only once, means ‘n=1’. expected result : 102, 104

所以我写了一个嵌套查询 -

select Sales1.Sales_Id,Sales1.Rev
from (select Sales_Id, Max(Revision) as "Rev" from Sales Group By Sales_Id )as Sales1 where Rev=0

select Sales1.Sales_Id,Sales1.Rev
from (select Sales_Id, Max(Revision) as "Rev" from Sales Group By Sales_Id )as Sales1 where Rev=1

我得到了正确答案。

使用嵌套查询会降低性能,我希望在不使用嵌套查询的情况下简化此查询。

请建议我。

1 个答案:

答案 0 :(得分:2)

在“一个查询”中,您可以使用HAVING子句:

select sales_id, max(revision)
from Sales
group by sales_id
having max(revision) = 0;

select sales_id, max(revision)
from Sales
group by sales_id
having max(revision) = 1;

我在SqlFiddle中添加了您的查询,您可以查看执行计划以查看差异。

SqlFiddle