日期:2014-05-16  浏览次数:20794 次

group by 在mysql和oracle中的差异
select * from addressbook_organization where parent_unid='12345' group by unid;


同样一句话,在mysql里面是正确的,在oracle里面是错误的。
细看之后,发现mysql在对这句话的处理有别于其他数据。在其他数据库中,要求含有group by的查询语句中,select后必须跟聚合函数或者在group by中的字段。

mysql对于上面这句的处理,有时候可以让我们偷懒。
他会按照unid分组,但只返回最新插入的那里记录!换句话说:
比如有这样2条记录:
id 1,parent_unid '12345' ,unid '23456'
id 2,parent_unid '12345' ,unid '23456'

那么在应用上面那句查询时,mysql会返回id=2的那条记录,因为这条记录比id=1后插入数据库。而同样的在oracle中应用这句查询的话,oracle直接就报ORA-00979:不是GROUP BY表达式。同样的情况在sybase中也会报这个错误!