如何将价值带出"存在"查询(MYSQL)?

时间:2014-05-03 12:45:42

标签: mysql sql

好的,我有两张桌子:

OrderTable (orderID is unique)
orderID - Date .....
1       - 11/12 ....
2       - 12/12 ....
....

OrderStage (each orderID has many stages)
orderID - Stage
1       - 1
1       - 3
2       - 2
2       - 4
....

现在我希望获得max(stage)= 3

的所有订单
select orderID,... From orderTable where  exists 
(select orderID, MAX(stage) from OrderStage group by orderID Having MAX(stage)=3 )

以上查询有效,但我不知道如何将Max阶段从OrderStage表中删除,以便结果如下:

orderID - Date ..... - MaxStage
1       - 11/12 .... - 3

这就是我的尝试:

select orderID,..., st.maxStage From orderTable where  
exists (select orderID, MAX(stage) maxStage from OrderStage 
group by orderID Having MAX(stage)=3 ) st

但是MYSQL显示错误。

那么如何解决这个问题呢。

注意:我不能使用JOIN cos我在现有的sql上构建这个查询非常复杂,如果我改为JOIN然后我可能会破坏代码。

1 个答案:

答案 0 :(得分:1)

如果要使用值

,则需要使用join
select ot.orderID,..., omax.maxStage
From orderTable ot inner join
     (select orderID, MAX(stage) as maxStage
      from OrderStage 
      group by orderID
      Having MAX(stage)=3
     ) omax
     on ot.orderId = omax.orderId;

inner join执行过滤,由于group by orderId,您不必担心结果集中无意中重复的行。