我买了笛卡尔产品,却找不到防止它的方法......
我尝试将查询简化为严格的最低要求:
select
SUM(tableA.amount) as "Total Amount"
from
tableA,
tableB,
where
tableA.id= 12 and
tableB.id= 10
这里的问题是tableB有3个结果行,所以总量增加了3倍(因为tableB的结果)。我无法弄清楚如何指定我只想要tableB的最后一个结果,我想这可以解决问题。
表A:id |量
表B: id |日期|评论
编辑:我评论过,但可能已将其添加到原始帖子上:我需要查询上的tableB(无法删除它),此tableB返回的每一行之间的差异是日期列答案 0 :(得分:0)
你并没有真正做笛卡尔积。或者,你是,但每张表中有一行。表现不是问题。
我可能倾向于将查询写成:
select SUM(a.amount) as Total_Amount
from (select a.* from tableA a where a.id = 12) a cross join
(select b.* from tableB b where b.id = 10) b;
这强调你正在制作笛卡尔积,但可能只是每张桌子的一行。
您可以将计算简化为:
select SUM(a.amount) as Total_Amount
from tableA a
where a.id = 12;
答案 1 :(得分:0)
根据我得到的帮助,我可能找到了解决问题的方法。请问这看起来不错吗?
我有这个
select
SUM(tableA.amount) as "Total Amount"
from
tableA,
tableB,
where
tableA.id= 12 and
tableB.id= 10
我试过这个因为日期是tableB返回的行的唯一区别,这似乎有效......
select
SUM(tableA.amount) as "Total Amount"
from
tableA,
tableB,
where
tableA.id= 12 and
tableB.id= 10 and
not exists(select
1
from
tableB b
where
b.date > tableB.date and
b.id = tableB.id
)