MYSQL - Использование функции обновления и группировки по - PullRequest
1 голос
/ 20 марта 2020

Этот оператор 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 submission_archive.submission_id'

После некоторого осмотра я подозревал, что мне может понадобиться использовать подзапрос для достижения результаты, которые я хочу. Я никогда не делал подзапросы, но у меня было go с этим:

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, но мне нужно обновить только одну из записей, которые иметь соответствие submission_id s - не имеет значения, какой именно, но это должен быть только один из них.

Может ли кто-нибудь помочь мне достичь того, чего я хочу? Большое спасибо.

1 Ответ

1 голос
/ 20 марта 2020

Правильный синтаксис должен выглядеть следующим образом:

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 предложения.

...