问题:
现有的代码形式类似如下(涉及两张表a,b):
SELECT a.*,sum(b.quantity),sum(b.amount)
FROM a,b
WHERE a.id = b.relation_id
GROUP BY a.id
注:其中表a只有一个主键(id)
这段sql在mysql是可以跑过,但是在postgresql里面因为有要求groupby的列要和select列一一对应,所以会报错。
为了提高可移植性,改成如下两种形式。因为不知道groupby的原理是什么,想问下下面两种哪种性能比较高?
形式A:(补充groupby的列数,使其和select一一对应)
SELECT a.*,sum(b.quantity),sum(b.amount)
FROM a,b
WHERE a.id = b.relation_id
GROUP BY a.id,a.index1,a.index2...
形式B:(先查出每笔数据的id集合,在根据id查出其他信息)
SELECT aa.*,t.quantity,t.amount
FROM(
SELECT a.id,sum(b.quantity) as quantity,sum(b.amount) as amount
FROM a,b
WHERE a.id = b.relation_id
GROUP BY a.id)t,a aa
WHERE aa.id = t.id
针对形式A来说的话,GROUP BY a.id之后,再对a.index1进行GROUP BY的时候,此时a.index1其实已经是唯一确定,不可能有多笔数据的了.不知道mysql对这种情况怎么处理?
业精于勤,荒于嬉;行成于思,毁于随。