Использовать Update с INNER JOIN в Oracle

Как поживаете,

Я выполняю senencia в Оракле (Update) используя INNER JOIN, но не смог делать это. Это код, который я использую:

UPDATE A
SET A.status = '2', target_date=SYSTIMESTAMP
FROM Table_A  A INNER JOIN TABLE_B B
   ON A.employee_number=B.employee_number and A.course_number=B.course_number
 WHERE A.status = '1' and NVL(B.employee_number,'')=''

Ошибка, которая появляется у меня в момент выполнения решения, - следующая:

SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 -  "SQL command not properly ended"

Правда не, который что я врежу. Какая-то подсказка в мою проблему?

Привет

0
задан 25.05.2016, 23:35
2 ответа

Этот синтаксис UPDATE с JOIN более свойственный SQL Server. В Oracle не будь вынесена.

Я не смог тестировать это, но оно должно бы быть нечто похожим:

UPDATE
(SELECT A.status, A.target_date
    FROM Table_A  A 
    INNER JOIN TABLE_B B
        ON A.employee_number=B.employee_number
            AND A.course_number=B.course_number
    WHERE A.status = '1' 
        AND NVL(B.employee_number,'')='') t
SET t.status = '2', t.target_date = SYSTIMESTAMP;

Другой выбор:

UPDATE Table_A SET Table_A.status = '2', Table_A.target_date = SYSTIMESTAMP
WHERE Table_A.status = '1'
    AND COALESCE(Table_A.employee_number, '')=''
    AND EXISTS (SELECT Table_B.course_number
                FROM Table_B
                WHERE Table_B.course_number = Table_A.course_number
                    AND Table_B.employee_number = Table_A.employee_number);
2
ответ дан 24.11.2019, 14:18
  • 1
    Который такой Асиер, я продолжаю с проблемой, продолжает меня помечая ошибку.: (. Но большое спасибо. –  Edgar Conrado 25.05.2016, 23:54
  • 2
    #191; Та же ошибка? –  Asier Villanueva 25.05.2016, 23:57
  • 3
    Ошибка, которая появляется у меня: SQL Ошибка: ORA-01031: insufficient privileges 01031. 00000 - " insufficient privileges" Но если я делаю простой Update, он это делает без какой-либо проблемы, так что я не думаю, что он из-за проблемы привилегий. –  Edgar Conrado 25.05.2016, 23:58
  • 4
    Tambi и # 233; n podr и # 237; схвати делать это с subquery, я издаю, чтобы помещать тебе пример –  Asier Villanueva 26.05.2016, 00:07
  • 5
    Сейчас ошибка, которая помечает меня, - следующая: SQL Ошибка: ORA-00971: missing SET keyword 00971. 00000 - " missing SET keyword" –  Edgar Conrado 26.05.2016, 00:22

эта делит NVL (B.employee_number,'') ='' она мне кажется любопытной, не, если, может быть, это дает тебе проблемы, и если ты тестируешь с B.employee_number is null

1
ответ дан 24.11.2019, 14:18
  • 1
    Хороший день Пересливки, спасибо за твой комментарий, В Равное использование это же самое решение " B.employee_number is null" но он продолжает меня помечая ошибку. –  Edgar Conrado 25.05.2016, 23:33
  • 2
    Добрый вечер в espa и # 241; в:).Pregunta дура, ты помещаешь; конец не? –  Renata 25.05.2016, 23:44
  • 3
    Что такие Пересливки, если, если я помещаю; в c и # 243; я говорю. Спасибо за observaci и # 243; n:) –  Edgar Conrado 25.05.2016, 23:50