2015-04-04 3 views
0

У меня есть две таблицы «Inventory» и «Tendor» где Inventory имеет первичный ключ pk_id, я обновленный «Inventory» таблицы при Inventory.ti_name = Tendor.ki_name с помощью следующего запросаКак вставить данные из одной таблицы в другую в оракула

Update Inventory A set (Used_NAME, ACCOUNT_NUMBER, ti_STATUS) 
= (Select B.Using_NAME, B.ACCOUNT_NO, B.ki_STATUS from 
Tendor B where A.ti_name = B.ki_name and a.pk_id is not null); 

Что-то не так в этом запросе или в любом оптимизированном?

После Updation для тех, кто не удовлетворяет условию Inventory.ti_name = Tendor.ki_name я хочу, чтобы вставить его в качестве новых строк в «Inventory» таблицы с первичным ключом pk_id следует изменить , как это сделать? для pk_id мне нужно сделать некоторую логику как «SEQ.NEXTVAL FROM DUAL' Кто-нибудь может предложить запрос,

обновляет

ответ

1

Этот запрос поиска совпадающие строки в таблицах inventory и tendor. Когда обе таблицы содержат строку с тем же значением ki_name, она обновляет строку в таблице inventory. Все строки из tendor, что не было найдено в inventory, будет вставлено там:

merge into Inventory a 
using Tendor b 
    on (A.ti_name = B.ki_name) 
when matched then update 
    set a.Used_NAME = B.Using_NAME, 
     a.ACCOUNT_NUMBER = B.ACCOUNT_NO, 
     a.ti_STATUS = B.ki_STATUS 
when not matched then 
insert (pk_id, Used_NAME, ACCOUNT_NUMBER, ti_STATUS) 
values (your_seq.nextval, B.Using_NAME, B.ACCOUNT_NO, B.ki_STATUS) 

Также вы можете использовать последовательность в insert заявлении.

+0

Позвольте мне проверить, если он будет работать, это будет здорово. Я использую oracle – peter

+0

@Dimitry 'при совпадении, а затем update' и 'когда не сопоставлен тогда' - это запрос оракула? – peter

+0

Да. Он является частью стандарта SQL, и он реализован в oracle. Дополнительная информация содержится в документации: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm – Dmitry

Смежные вопросы