Reputation: 10139
This SELECT
statement gives me the results I want:
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
For these results I want to set submission_archive.status_id=9
but when I try:
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
I get the following error:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'GROUP BY submission_archive.submission_id'
After some looking about, I suspected I might need to use a subquery to achieve the results I want. I have never done subquerys before, but I had a go with this:
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
)
And that got me this error:
Table 'submission_archive' is specified twice, both as a target for 'UPDATE' and as a separate source for data
I can perform the UPDATE
statement without the GROUP BY
statement, but I need to update only 1 of the records that have matching submission_id
s - it doesn't matter which one, but it has to be just one of them.
Can anyone help me achieve what I want? Many thanks.
Upvotes: 1
Views: 45
Reputation: 65228
Correct syntax should like this :
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
containing [INNER] JOIN
before the subquery instead of WHERE
clause.
Upvotes: 1