首页 > 解决方案 > 选择子表中具有特定 id 的行的总和并将其与父表进行比较

问题描述

您好,我有一个带有两个表的 SQL 数据库。

common_fee_collection //父表

common_fee_collection_headwise //子表

现在这两个表的结构是这样的

CREATE TABLE `common_fee_collection` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `admno` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `amount` double(13,2) NOT NULL );

此表包含行,其中的amount列表示一生中的总金额

id = 这是一个具有唯一数据的自动增量 ID

admno = 唯一的准入号码

金额 = 表 common_fee_collection_headwise.amount 中所有行的总金额 common_fee_collection_headwise.amount

CREATE TABLE `common_fee_collection_headwise` ( `id` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, `moduleId` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `receiptId` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, `amount` double(13,2) NOT NULL )

id AUTO_INCREMENT 整数数据

receiveId =这是来自 common_fee_collection.id 的外键

金额=特定时间特定交易的金额

现在的问题是我想获得 common_fee_collection.amount 不等于 SUM(common_fee_collection_headwise.amount) 的行。表示数量不匹配的行。

我已经尝试了这三个查询,但它给出了错误的输出或错误

1>SELECT * FROM common_fee_collection WHERE amount <> SUM(common_fee_collection_headwise.amount) AND id=common_fee_collection_headwise.receiptId;

此代码给出错误#1111 - Invalid use of group function

2>SELECT * FROM common_fee_collection as com WHERE amount<>SUM(common_fee_collection_headwise.amount) AND id=common_fee_collection_headwise.receiptId

此代码给出错误#1111 - Invalid use of group function

3>SELECT * FROM common_fee_collection AS a JOIN common_fee_collection_headwise as b ON a.id=b.receiptId HAVING SUM(b.amount) <> a.amount

此代码从 common_fee_collection 返回第一行,这不是我想要的正确返回......我不知道我的查询是对还是错,但我希望我清楚我的问题,你会尽力提供帮助。

标签: mysqlsql

解决方案


您可以先汇总它们,然后再进行比较 -

SELECT CFC.`id`, CFC.`amount`, CFCH.HEADWISE_AMOUNT
  FROM `common_fee_collection` CFC
  LEFT JOIN (SELECT `receiptId`, SUM(`amount`) HEADWISE_AMOUNT
               FROM `common_fee_collection_headwise`
              GROUP BY `receiptId`) CFCH ON CFC.`id` = CFCH.`receiptId`
 WHERE CFC.`amount` <> CFCH.HEADWISE_AMOUNT

推荐阅读