Вставить из таблицы соблазнов, где SEQ_NUM <> 2 - PullRequest
2 голосов
/ 02 апреля 2019

Я пытаюсь выполнить вставку в таблицу ниже PS_VNDR_ADDR_SCROL из данных во временной таблице, в которой еще нет вставляемой строки в таблице PS_VNDR_ADDR_SCROL, для которой SEQ_NUM равно 2 длято же самое VENDOR_ID.

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

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE NOT EXISTS (
    SELECT VENDOR_ID 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2
)

Я также пытался использовать NOT IN следующим образом, но я получаю синтаксическую ошибку:

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE NOT IN (
    SELECT VENDOR_ID 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2
)

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

вставить в таблицу ниже PS_VNDR_ADDR_SCROL [...] где не уже есть строка в таблице [...] PS_VNDR_ADDR_SCROL, которая имеет SEQ_NUM равныйдо 2 для того же VENDOR_ID

Ваш подход с использованием NOT EXISTS выглядит нормально, однако я думаю, что для соответствия вашей спецификации коррелированный подзапрос должен быть записан:

SELECT VENDOR_ID 
FROM PS_VNDR_ADDR_SCROL B 
WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2

Вместо:

SELECT VENDOR_ID 
FROM PS_VNDR_ADDR_SCROL B 
WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM <> 2

Следовательно, попробуйте:

INSERT PS_VNDR_ADDR_SCROL 
SELECT 
    'SHARE', 
    A.VENDOR_ID, 
    2, 
    'HOME', 
    'BUSN', 
    ''
FROM #DepWork2 A
WHERE NOT EXISTS (
    SELECT 1 
    FROM PS_VNDR_ADDR_SCROL B 
    WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2
)

Примечание: синтаксическая ошибка во втором запросе происходит из этой части кода SQL:

...
WHERE NOT IN (
    SELECT VENDOR_ID 
    ...
)

Необходимо указать столбец слева от условия NOT IN.Вероятно, это должно быть:

...
WHERE A.VENDOR_ID NOT IN (
    SELECT VENDOR_ID 
    ...
)

Примечание: второй запрос также должен иметь условие SEQ_NUM = 2 вместо SEQ_NUM <> 2 в коррелированном подзапросе.

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

попробовать с помощью существует

INSERT PS_VNDR_ADDR_SCROL 
SELECT 'SHARE', A.VENDOR_ID, 2, 'HOME', 'BUSN', ''
FROM #DepWork2 A
WHERE  EXISTS (SELECT 1  FROM PS_VNDR_ADDR_SCROL B  WHERE B.VENDOR_ID = A.VENDOR_ID AND SEQ_NUM = 2)
...