Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Sql查询以获取两个表中总计的数据差异_Mysql_Sql_Join_Inner Join - Fatal编程技术网

Mysql Sql查询以获取两个表中总计的数据差异

Mysql Sql查询以获取两个表中总计的数据差异,mysql,sql,join,inner-join,Mysql,Sql,Join,Inner Join,我有两张桌子: 预订-记录订单详细信息 id | booking_amount ------------------- 1 | 150 2 | 500 3 | 400 付款-记录订单的付款 id | booking_id | amount ------------------------ 1 | 1 | 100 2 | 1 | 50 2 | 2 |

我有两张桌子:

预订-记录订单详细信息

id | booking_amount
-------------------
1  |            150
2  |            500
3  |            400
付款-记录订单的付款

id | booking_id | amount
------------------------
1  |          1 |    100
2  |          1 |     50
2  |          2 |    100

我想查找所有付款未完成的预订。根据上述数据,我们预计答案为2,3,因为预订id=1的付款总额与预订表中相应的预订金额相匹配。

您需要使用外部联接来组合两个表并查找您的条件。此外,您还需要使用SUM。。函数获取付款表中每个id的金额总和

请试试这个:

select b.id from booking b 
left outer join -- cant be inner join because we lose id:3 in that case.
(
  select booking_id, SUM(amount) as Total 
  from payment group by booking_id
) p on b.id = p.booking_id
where b.booking_amount > Coalesce(Total,0) --Coalesce is required for such values coming NULL, like id:3, they will be assigned as 0.

要回答您的问题,您需要考虑两件事:

您希望表中的总金额按每个预订行付款

您想将您的预订金额表加入付款

第1部分非常简单:

SELECT sum(amount) as TotalP, booking_id FROM payment GROUP BY booking_id
只是一个带有简单聚合函数的基本查询

对于第2部分,我们希望加入订票金额和付款;基本连接将是:

SELECT * FROM booking b 
LEFT JOIN payment p ON b.id = p.booking_id
我们做一个左加入,因为我们可能有一些不在付款表中的预订。对于这些预订,您将得到空值。我们将使用合并将空值替换为0

最后一个问题是:

SELECT b.id, COALESCE(TotalP, 0),  b.booking_amount
FROM
 booking b
LEFT JOIN
 (SELECT sum(amount) as TotalP, booking_id FROM payment GROUP BY booking_id) as T
ON  b.id = T.booking_id
WHERE COALESCE(TotalP, 0) < b.booking_amount

我不明白你到底想要什么。你的答案是2,3吗?请再次检查我的问题。我在尝试时添加了屏幕快照。它显示错误组功能无效。我更改了。但只是通知说它基本上打开了Jean的答案。稍后我将寻找另一种方法并再次更新我的答案。是的,我认为没有更好的解决方案。虽然此代码可能会回答此问题,但提供有关为什么和/或如何回答此问题的其他上下文将显著提高其长期价值。请你的答案加上一些解释。很好,它将帮助我写sql查询。