Обновление строки, внутреннее соединение с получением верхней строки - PullRequest
0 голосов
/ 29 ноября 2018

Использование MariaDB

Я пытаюсь обновить membershipRenewDate (в таблице officiantsDetails), используя значение MAX из renewDate (в таблице officiantsRenewals)

Внутреннее соединениена officiant_id (одинаковое имя столбца для обеих таблиц)

У меня что-то подобное, но я получаю синтаксическую ошибку.

UPDATE officiantsDetails offd 
SET offd.membershipRenewDate = offr.renewDate
FROM (SELECT TOP (1) renewDate, officiant_id FROM officiantsRenewals ORDER BY renewDate DESC ) as offr
WHERE offd.officiant_id = offr.officiant_id

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Синтаксис, который вы используете, не MariaDB.В MariaDB вы можете использовать JOIN:

UPDATE officiantsDetails offd JOIN
       (SELECT renewDate, officiant_id
        FROM officiantsRenewals
        ORDER BY renewDate DESC
        LIMIT 1
       ) offr
       ON offd.officiant_id = offr.officiant_id
    SET offd.membershipRenewDate = offr.renewDate;

Синтаксис, который вы используете, больше напоминает SQL Server.

0 голосов
/ 29 ноября 2018

Вы должны быть в состоянии использовать Общее Табличное Выражение (CTE) для этого.Вы используете выражение WITH для определения своего «подзапроса», а затем INNER JOIN CTE для таблицы, которую хотите обновить.Это выглядело бы примерно так:

WITH Top1RenewDate AS 
(
    SELECT TOP (1) 
        renewDate, 
        officiant_id 
    FROM officiantsRenewals 
    ORDER BY renewDate DESC 
)
UPDATE offd
SET offd.membershipRenewDate = offr.renewDate
FROM officiantsDetails offd
INNER JOIN Top1RenewDate offr ON offd.officiants_id = offr.officiants_id

Этот же синтаксис также будет работать для SQL Server, хотя вам необходимо добавить ; перед ключевым словом WITH в этой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...