Левое соединение с использованием временной таблицы не работает - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь выполнить «левое соединение» для таблицы «x», но мне нужно «row_number», поэтому я использую временную таблицу с командой «with», но запрос не работает, и я получаюследующая ошибка:

Ошибка SQL [156] [S1000]: неверный синтаксис рядом с ключевым словом «WITH».Неверный синтаксис рядом с ключевым словом WITH.Неверный синтаксис рядом с ключевым словом WITH.Неверный синтаксис рядом с ключевым словом «с».Если этот оператор является общим табличным выражением, предложением xmlnamespaces или предложением контекста отслеживания изменений, предыдущий оператор должен заканчиваться точкой с запятой.Неверный синтаксис рядом с ')'. `

кто-то знает, как это исправить

SELECT telefoneEnriquecido1. FROM VPOTPRP P
    LEFT JOIN (
        WITH tel AS (
            SELECT
                ID_PROSP,
                DT_INC,
                ID_NUM_TEL AS novoTelefone,
                DT_ATC AS dataAtualizacao,
                ROW_NUMBER() OVER (PARTITION BY ID_PROSP ORDER BY DT_ATC DESC) AS rowNumber
            FROM
            VPOTTEL
        )
        SELECT
        FROM tel
        WHERE
        rowNumber = 1
    ) telefoneEnriquecido1 on p.ID_PROSP = telefoneEnriquecido1.ID_PROSP

1 Ответ

2 голосов
/ 22 сентября 2019

Странный синтаксис.Я всегда считаю, что CTE, встроенные в запрос, сбивают с толку, хотя некоторые базы данных поддерживают их.Я не считаю, что CTE добавляет что-либо к запросу;просто используйте подзапрос:

SELECT . . .   -- whatever columns you want
FROM VPOTPRP P LEFT JOIN (
     (SELECT ID_PROSP, DT_INC, ID_NUM_TEL AS novoTelefone,
             DT_ATC AS dataAtualizacao,
             ROW_NUMBER() OVER (PARTITION BY ID_PROSP ORDER BY DT_ATC DESC) AS rowNumber
      FROM VPOTTEL
     ) PL
     ON P.ID_PROSP = PL.ID_PROSP AND rowNumber = 1
...