Как я могу использовать LIMIT 1 в подзапросе - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь выполнить запрос обновления с таблицей, которая присоединяется к себе, и я хочу присвоить столбцу M_USER первую строку, которую возвращает оператор select.Я знаю, что в SQL Server я мог бы использовать TOP 1, и я думаю, что эквивалент будет LIMIT 1 в Vertica.

Поэтому я попытался написать запрос с LIMIT 1, но я получаю эту ошибку:

ERROR: Correlated subquery expression without aggregates and with limit is not supported

Вот мой запрос:

UPDATE REPORT.sub_2019 a
SET M_USER= (Select u.UPDATED_USER 
        from REPORT.sub_2019 u 
        where u.MBR_ID = a.MBR_ID 
        and u.NAME= a.NAME and u.STATUS_REASON = 'Pending' limit 1)
where a.RESULT is not null

Я просто хочу получить первый UPDATED_USER, который возвращает подзапрос.Должен ли я использовать LIMIT или любой другой способ написания запроса?

Ответы [ 2 ]

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

Использовать максимум или минимум в подзапросе

UPDATE REPORT.sub_2019 a
SET M_USER= (Select min(u.UPDATED_USER )
        from REPORT.sub_2019 u 
        where u.MBR_ID = a.MBR_ID 
        and u.NAME= a.NAME and u.STATUS_REASON = 'Pending')
where a.RESULT is not null
0 голосов
/ 11 апреля 2019

Я думаю, вы могли бы использовать функцию ранга для этого:

UPDATE REPORT.sub_2019 a
SET M_USER= (Select u.UPDATED_USER, rank() OVER (PARTITION BY <field> ORDER BY <field> DESC) as rank 
        from REPORT.sub_2019 u 
        where u.MBR_ID = a.MBR_ID 
        and u.NAME= a.NAME 
        and u.STATUS_REASON = 'Pending'
        and rank = 1)
where a.RESULT is not null
...