给出这些表:
Table1 asID mID aType rID sNo 1 2 11 212 1 4 2 8 242 1 4 2 7 241 1 3 2 11 547 2 2 2 3 567 2 4 2 2 577 2 6 3 11 785 1 1 3 6 735 1 table2 asID rating 1 1 1 -1 3 1 3 1 3 1 4 1
注意:
表1中的:
aType=11
。每个块不能包含2个aType=11
mID=2 & sNo=1
):
因此,假设用户输入aType=11
,然后在表1中我们可以提取
Query1 mID aType rID sNo 2 11 212 1 2 11 547 2 3 11 785 1
因此,在搜索aType=11
之后,我们将知道3个块:
-Chunk 1(mID = 2,sNo = 1)
-Chunk 2(mID = 2,sNo = 2)
-Chunk 3(mID = 3,sNo = 1)
但是,查询1缺少评级信息的总和。我需要为查询1中的每个块获得一些评级。
-Chunk 1的唯一asID为1& 4(注意:4次重复2次)。并且块1在表2中应该具有rating = 1cos的总和,因为1的ID是+1& -1& asID为4是+1。
因此,当用户搜索aType = 11时的最终查询如下所示:
Query1 mID aType rID sNo sumOfRating 2 11 212 1 1 2 11 547 2 4 3 11 785 1 0
我们可以在1个查询中实现这个吗?
查询1:select mID, aType, rID, sNo from table1 where aType=11
那么我们应该修改那个查询,以便我们可以在最终表格中包含评级标准?
我正在使用MYSQL 5.0
答案 0 :(得分:3)
您拥有的一个选项是使用相关子查询:
select mid, atype, rid, sno,
(
select sum(t2.rating)
from table2 t2
join (
select distinct asid, mid, sno
from table1
) t11 on t2.asId = t11.asId
where t1.mid = t11.mid and t1.sno = t11.sno
) sumofrating
from table1 t1
where atype = 11;
关键是您必须使用子查询来获得不同的asid/mid/sno
组合(这样您就不会计算4次评分两次)。