Mysql 从组id为NULL的记录中减去组id为NULL的记录的值不为NULL
我试图将“group_id”不为NULL的记录的“count”字段从group_id为NULL的记录的同一字段中减去,因为这两个字段的日期相同Mysql 从组id为NULL的记录中减去组id为NULL的记录的值不为NULL,mysql,sql,Mysql,Sql,我试图将“group_id”不为NULL的记录的“count”字段从group_id为NULL的记录的同一字段中减去,因为这两个字段的日期相同 CREATE TABLE `test` ( `date` date NOT NULL, `group_id` int(11) DEFAULT NULL, `count` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; I
CREATE TABLE `test` (
`date` date NOT NULL,
`group_id` int(11) DEFAULT NULL,
`count` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `test` (`date`, `group_id`, `count`) VALUES
('2021-05-15', NULL, 3),
('2021-05-15', 1, 2),
('2021-05-15', 2, 1);
基本上,它应该从3中减去2和1,并将3更新为0。
所以我做了一个内部连接:
UPDATE test AS t1
INNER JOIN test t2
SET t2.count = t2.count - t1.count
WHERE
t1.group_id IS NOT NULL AND
t2.group_id IS NULL AND
t1.date = t2.date;
它处理2条记录,但处理3条记录,就像在我的示例中一样,它忽略了组为2的第二条记录。因此,结果是count=3变为1,而不是0
如何正确地修复它?添加另一个内部联接,否则我应该使用不同的方法?(仅限2条以上的group_id不为空记录)
另外,对于每个日期,只有一个组id为空的记录。我认为您希望在加入之前聚合:
UPDATE test t1 JOIN
(SELECT date, SUM(count) as cnt
FROM test t2
WHERE group_id IS NULL
GROUP BY date
) t2
ON t1.date = t2.date
SET t1.count = t1.count - t2.count
WHERE t1.group_id IS NULL ;