我有以下问题:
我想更新 COUNT
条件大于 1 的所有行,否则我想更新除 1 之外的所有行。它还应该根据 other_ID 进行更新。
虚拟表:
+----+----------+----------+-------------+
| id | other_ID | cirteria | updatefield |
+----+----------+----------+-------------+
| 1 | 1 | 1 | 0 |
| 2 | 1 | 1 | 0 |
| 3 | 1 | 1234 | 0 |
| 4 | 2 | 2 | 0 |
| 5 | 2 | 1 | 0 |
| 6 | 2 | 1 | 0 |
| 7 | 4 | 20 | 0 |
| 8 | 4 | 1 | 0 |
| 9 | 4 | 60 | 0 |
| 10 | 5 | 1 | 0 |
| 11 | 5 | 1 | 0 |
| 12 | 6 | 5 | 0 |
+----+----------+----------+-------------+
预期结果:
+----+----------+----------+-------------+
| id | other_ID | cirteria | updatefield |
+----+----------+----------+-------------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 1 |
| 3 | 1 | 1234 | 0 |
| 4 | 2 | 2 | 0 |
| 5 | 2 | 1 | 1 |
| 6 | 2 | 1 | 1 |
| 7 | 4 | 20 | 0 |
| 8 | 4 | 1 | 1 |
| 9 | 4 | 60 | 0 |
| 10 | 5 | 1 | 0 |
| 11 | 5 | 1 | 1 |
| 12 | 6 | 5 | 0 |
+----+----------+----------+-------------+
我的想法:
UPDATE pics AS tu SET updatefield=1 WHERE criteria=1 AND (select count(*) as cnt2 from pics where criteria>1 group by other_id)>1;
错误:表“tu”被指定两次,既作为“UPDATE”的目标又作为单独的数据源
此外,我在获得正确的计数方面也遇到了问题: SELECT other_id, count() as cnt FROM pics AS ts WHERE criteria=1 and (select count() as cnt2 from pics where criteria>1)>0 GROUP BY other_id;
我想为 other_id=5 获取 cnt = 1,但我得到 cnt=2
与 选择 other_id, COUNT(*) AS cnt2 来自图片 其中条件>1 按 other_id 分组;
我得到了我想要更新更新字段的所有 other_ids 。但如何将其与更新连接起来呢?以及如何获取 other_id=5 之外的所有内容
最佳答案
您可以将子查询别名为另一个查询,例如:
UPDATE test
SET updatefield = 1
WHERE updatefield = 0 AND criteria = 1
AND other_id IN (
SELECT a.id FROM (
SELECT other_id AS id
FROM test
WHERE criteria > 1
GROUP BY other_id
HAVING COUNT(*) > 1
) a
);
这是SQL Fiddle 。
更新
这将更新符合条件 0
和 >1
的记录的 ID。现在,要更新具有 1
条件的多个记录的记录,您需要执行如下操作:
UPDATE test
SET updatefield = 1
WHERE updatefield = 0 AND criteria = 1
AND id IN (
SELECT a.id FROM (
SELECT MIN(id) AS id
FROM test
WHERE criteria = 1
GROUP BY other_id
HAVING COUNT(*) > 1
) a
);
关于根据计数条件指定的 MySQL 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46096560/