Преобразование оператора select в обновление (включая наличие и наличие) - PullRequest
1 голос
/ 07 апреля 2019

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

Это утверждение select у меня есть:

SELECT 
    MG.id,
    MG.status,
    MG.fin,
    MG.execDateTime,
    EXISTS
    ( 
    SELECT 1
        FROM Mtask T
                JOIN MTaskHis TH ON TH.t_id= T.id
        WHERE T.tg_id = MG.id
                AND YEAR(TH.dateTime) = 2019 
    ) AS hasExecStart,

    NMG.id,
    NMG.execDateTime,
    EXISTS
    ( 
    SELECT 1
        FROM Mtask T
                JOIN MTaskHis TH ON TH.t_id = T.id
        WHERE T.tg_id = NMG.id
                AND YEAR(TH.dateTime) = 2019
    ) AS hasExecNext

FROM Management_Group MG
        JOIN MT_Groupman MTGM ON 
        MG.tgm_id = MTGM.id

        LEFT JOIN Management_Group NMG ON MTGM.id = 
        NMG.tgm_id AND YEAR(NMG.execDateTime) = 2019

        JOIN Management_Man MM ON MTGM.man_id = MM.id

        JOIN Location L ON MM.location_id = L.id

WHERE L.org_id = 69
        AND MG.stat != 'DELETED'
        AND YEAR(MG.execDateTime) = 2018
        AND MM.Type= 9
        AND MG.fin != 1
        AND EXISTS
        ( 
           SELECT 1
           FROM Mtask T
           WHERE T.tg_id = MG.id
               AND T.stat = 'execution'
    )

HAVING hasExecNext = 0 AND hasExecStart = 1 

Я знаю стандартные обновления в sql:

UPDATE <TABLENAME>
SET <fieldName> = <value>
WHERE <conditons>

За исключением того, что я не знаю, как преобразовать этот оператор выбора, который я сделал, в оператор обновления, причина этого: - Где я могу поместить псевдоним существующего в оператор обновления - я также не понимаюкогда или куда помещать все СОЕДИНЕНИЯ в операторе from - А как насчет HAVING

Каков наилучший способ сделать объединенные обновления, подобные этому?

1 Ответ

0 голосов
/ 07 апреля 2019

В ОБНОВЛЕНИИ вы можете присоединить таблицу, которую хотите обновить, к подзапросу, который содержит ваш текущий запрос.

UPDATE YourTable t
JOIN
(
   << add your query here >>
) q ON q.SomeKeyField = t.SomeKeyField 
SET t.FieldName = q.FieldNameFromSubquery,
    t.OtherFieldName = q.OtherFieldNameFromSubquery
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...