mysql - MYSQL - 一起使用更新和分组
问题描述
这个SELECT
语句给了我想要的结果:
SELECT submission_archive.id,
submission_archive.status_id,
lead.status_id AS job_status_id,
submission_archive.submission_id,
lead.id AS lead_id
FROM submission_archive
JOIN record
ON submission_archive.record_id = record.id
JOIN lead
ON record.lead_id = lead.id
WHERE submission_archive.status_id = 1
AND lead.status_id = 9
GROUP BY submission_archive.submission_id
对于这些结果,我想设置submission_archive.status_id=9
但是当我尝试时:
UPDATE submission_archive
JOIN record
ON submission_archive.record_id = record.id
JOIN lead
ON record.lead_id = lead.id
SET submission_archive.status_id = 9
WHERE submission_archive.status_id = 1
AND submission.status_id = 9
GROUP BY submission_archive.submission_id
我收到以下错误:
您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在“GROUP BY submit_archive.submission_id”附近使用的正确语法
经过一番查看,我怀疑我可能需要使用子查询来实现我想要的结果。我以前从未做过子查询,但我尝试过:
UPDATE submission_archive
SET status_id=9
WHERE (
SELECT submission_archive.id
FROM submission_archive
JOIN record
ON submission_archive.record_id=record.id
JOIN lead
ON record.lead_id=lead.id
WHERE submission_archive.status_id=1 AND lead.status_id=9
GROUP BY submission_archive.submission_id
)
这给了我这个错误:
表“submission_archive”被指定了两次,既作为“UPDATE”的目标,又作为数据的单独源
我可以在UPDATE
没有该语句的情况下执行该GROUP BY
语句,但我只需要更新 1 个匹配submission_id
s 的记录 - 哪一个并不重要,但它必须只是其中之一。
谁能帮我实现我想要的?非常感谢。
解决方案
正确的语法应该是这样的:
UPDATE submission_archive sa1
JOIN
(
SELECT sa.id
FROM submission_archive sa
JOIN record r
ON sa.record_id = r.id
JOIN lead l
ON r.lead_id = l.id
WHERE sa.status_id = 1
AND l.status_id = 9
GROUP BY sa.submission_id
) sa2
ON sa1.id = sa2.id
SET sa1.status_id = 9
包含[INNER] JOIN
在子查询而不是WHERE
子句之前。
推荐阅读
- c - 如何在没有循环的情况下找到用户输入的第一位
- python - 如何使用数据透视表或分组表来划分这些值
- python - 如何让 django rest api 在我的电脑上运行 python 文件
- react-native - 在android中反应本机开关设计
- javascript - 当我提交用户登录表单时,我希望我的网页被重定向
- reactjs - 如何在不重新启动循环的情况下读取连续异步循环内的反应上下文/状态数据
- amazon-web-services - AWS SSL 证书安装问题
- linux - ELF 文件中的重定位加数 - Elf64_Rel 与 Elf64_Rela?
- javascript - 如何在reactjs中反转无限滚动条
- python - 使用 pyserial 读取 Scale 显示 b''