【发布时间】:2021-05-15 05:35:38
【问题描述】:
我正在尝试从 group_id 为 NULL 的同一记录字段中减去“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;
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。 所以我用 INNER JOIN 做到了:
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 条记录,就像在我的示例中一样,它会忽略 group_id=2 的第二条记录。所以结果是 count = 3 变成了 1 而不是 0。
如何正确修复它?添加另一个 INNER JOIN 或者我应该使用不同的方法? (只是可能超过 2 个 group_id IS NOT NULL 记录)
附:每个日期只有 1 条 group_id 为 NULL 的记录。
【问题讨论】: