假设我们有3个表,第1个表是主表,下面是详细信息
MasterTable(ID,COL1,COL2)
ChildTable1(ID,MasterId,Amount1)
ChildTable2(ID,MasterId,AMOUNT2)
我必须找到来自mastertable的ID sum(chiletable1.Amount1)
应大于sum(chiletable2.Amount2)
我已经使用groupby和having子句编写了查询,该子句提供了正确的数据,
有没有其他方法可以在没有groupby的情况下编写相同的查询,如果表中有大量的记录,请记住性能问题。 以下是我的查询
select Mastertable.Id
from Mastertable,Childtable1,ChildTable2
where Mastertable.Id=Childtable1.MasterId
and ChildTable1.MasterId=ChildTable2.MasterId
group by MasterTable.Id
having SUM(Childtable1.Amount1) > SUM(Childtable2.Amount2)
答案 0 :(得分:1)
要回答您的问题,否。
原因很简单:如果没有GROUP BY
,则无法拥有SUM()
。 (除了总计)
(编辑:好吧,也许是一个包含循环,游标等的存储过程,但是 肯定是一种矫枉过正的行为!;)
答案 1 :(得分:0)
好吧,你将不得不在某些点进行分组,所以我不知道为什么你根本不想分组。
您可以尝试按子表中的ID进行分组:
SELECT M.Id
FROM Mastertable M
INNER JOIN (SELECT MasterID,
SUM(Amount) Amount
FROM Childtable1
GROUP BY MasterID) C1
ON M.Id = C1.MasterID
INNER JOIN (SELECT MasterID,
SUM(Amount) Amount
FROM Childtable2
GROUP BY MasterID) C2
ON M.Id = C2.MasterID
WHERE C1.Amount > C2.Amount
如果子表中有外键返回MasterTable
或MasterID
上的索引,这可能是没有通过快照或其他方法预先聚合的最快方法。 / p>