我一直在尝试使用SUM(),但它一直没有用,也许我用它错了。
这就是我的表格,我有3:命运,酒店和储备
Table 1 = destiny
des_id | des_name | des_price
1 | Brazil | 800
2 | Paris | 900
Table 2 = hotel
hot_id | hot_name | hot_price
1 | Snowflake | 200
2 | Aurora | 300
Table 3 = reserve
res_id | hotel_id | destiny_id | res_total
1 | 1 | 1 |
我想要保留区中所选ID的res_total = hot_price + destiny_price,但我得到的abusrd金额不应该像总数6000或23000那样发生。
这是我一直在尝试的代码:
Select res_id, (Sum(hotel_price) + Sum(destiny_price)) as res_total
from reserve, hotel, destiny
group by res_id;
答案 0 :(得分:0)
您的查询缺少连接条件,因此每个元组都连接到其他元组(笛卡尔积,交叉连接)。请尝试以下查询:
select r.res_id, ifnull(sum(d.des_price),0) + ifnull(sum(h.hot_price),0)
from reserve r
left join destiny d on r.destiny_id = d.des_id
left join hotel h on r.hotel_id = h.hot_id
group by r.res_id
该查询假定des_id
和hot_id
分别是destiny
和hotel
中的密钥。该查询可以处理未填写预留中destiny_id
和/或hotel_id
的情况(因此语句中的left join
和ifnull
。)