gpt4 book ai didi

mysql - 如何多次更新表上的字段,不包括不存在的字段

转载 作者:行者123 更新时间:2023-11-29 06:55:49 27 4
gpt4 key购买 nike

我进行了一个查询,该查询对 tableA 中的行进行计数,并将计数按 set_id 字段分组到临时表 c 中。然后它通过将其 current_count 字段的值更改为表 c 中的值,对 tableB 执行 UPDATE s count 如果表 c 中的 count 字段与 current_count 具有相同的 set_id > 字段的 set_id 值。

UPDATE sets, (
SELECT
set_id,
COUNT(set_id) AS count
FROM leads_auto
GROUP BY set_id
) c
SET sets.current_count = c.count
WHERE sets.set_id = c.set_id

此查询的缺点是如果不存在计数<,则它无法UPDATE tableB current_count 值为零/strong> 在表 c 中用于 tableBset_id

我试过了

UPDATE sets, (
SELECT
set_id,
COUNT(set_id) AS count
FROM leads_auto
GROUP BY set_id
) d
SET sets.current_count = 0
WHERE sets.set_id != d.set_id

但它不会影响 tableB 上的任何行,即使表 c 返回具有 set_id 的行tableB 并排除 tableB 中确实存在的一些 set_id

有人知道如何实现吗?

SELECT set_id, COUNT(set_id) AS count FROM leads_auto GROUP BY set_id

返回

set_id |   count
-------+---------
1 | 7
5 | 5
4 | 16
7 | 2000000

最佳答案

WHERE 子句实际上是一个INNER JOIN:

WHERE sets.set_id = c.set_id

它只返回存在于两个表中的行。将查询转换为 LEFT JOIN 以在未找到匹配项时返回右侧表的 NULL 值:

UPDATE sets AS s
LEFT JOIN (
SELECT
set_id,
COUNT(set_id) as cnt
FROM leads_auto
GROUP BY set_id
) d
ON s.set_id = d.set_id
SET s.current_count = COALESCE(d.cnt, 0)

关于mysql - 如何多次更新表上的字段,不包括不存在的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12767130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com