2013-09-12 3 views
0

Я хочу выбрать некоторые данные, используя простой sql, и вставить эти данные в другую таблицу. Обе таблицы одинаковы. Типы данных и имена столбцов одинаковы. Просто это временная таблица таблицы мастеров. Используя единый sql, я хочу вставить эти данные в другую таблицу и в том случае, когда я проверяю E_ID =? проверив часть. Моя другая проблема - иногда в таблице могут быть любые соответствующие строки. В это время это может быть исключение sql? Другая проблема заключается в том, что это могут быть несколько совпадающих строк. Это означает, что один E_ID может иметь несколько строк. В качестве примера в моей таблице attachment_master и attachments_temp имеется несколько строк для одного идентификатора. Как решить эти проблемы? У меня другая проблема. Данные моей главной таблицы могут вставлять временную таблицу, используя следующий код. Но я хочу изменить только один столбец, а другие - одни и те же данные. Потому что я хочу изменить колонку состояния temp table.Как выбрать данные и вставить эти данные с помощью одного sql?

insert into dates_temp_table SELECT * FROM master_dates_table where e_id=?; 

Здесь все данные вставляются в мои даты_temp_table. Но я хочу добавить все данные столбца и изменить только столбец date_temp_table как «Модифицированный». Как мне изменить этот код?

+0

Если соответствующие строки существуют в целевой таблице, что бы вы хотели сделать? Игнорировать или обновлять или удалять? – user75ponic

+0

Я хочу добавить запрошенные значения id в таблицу temp и изменить статус столбца temp_table как «Изменено». – user2632766

ответ

0

вы можете использовать заявление слияния I Я правильно понимаю ваше требование.

Documentation

Как я не ваша структура таблицы ниже, основана на предположении, см ли это удовлетворить ваши требования. Я предполагаю, что e_id является первичным ключом или изменяется в соответствии с вашим дизайном таблицы.

MERGE INTO dates_temp_table trgt 
     USING (SELECT * FROM master_dates_table WHERE e_id=100) src 
      ON  (trgt.prm_key = src.prm_key) 
WHEN NOT MATCHED 
THEN 
    INSERT  (trgt.col, trgt.col2, trgt.status) 
     VALUES (src.col, src.col2, 'Modified'); 

Более подробная информация и примеры here

+0

Я отправляю свой E_ID. Я не хочу сравнивать и получать. Я отправляю свой E_ID и, если этот идентификатор доступен, я вставляю эти данные в свою временную таблицу и изменяю статус временной таблицы как «Модифицированный» и в противном случае ничего не делаю. Как мне это сделать? – user2632766

+0

@ user2632766 Но вы упомянули в своем вопросе, что у вас есть соответствующие строки! Если у вас есть соответствующие строки, используйте первичный ключ для соответствия и используйте 'E_ID 'в том случае, когда это условие. Я отредактировал свой ответ. – user75ponic

+0

Я удалил часть обновления, поэтому она не будет делать никаких обновлений, если строки соответствуют. И если строки не совпадают, они будут вставлять строки, а столбец 'status' будет помечен как' Modified' – user75ponic

2

Вы можете попробовать это:

insert into table1 (col1, col2, col3,....) 
SELECT col1, col2, col3, .... 
FROM table2 where (you can check any condition here on table1 or table2 or mixed) 

Для получения дополнительной информации посмотрите here и this similar question Надеюсь, что это может помочь вам.

РЕДАКТИРОВАТЬ: Если я правильно понимаю ваши требования должным образом, то это может быть полезным для вас решение:

insert into table1 (col-1, col-2, col-3,...., col-n, <Your modification col name here>) 
    SELECT col-1, col-2, col-3,...., col-n, 'modified' 
    FROM table2 where table1.e_id=<your id value here> 

В соответствии с Вашим комментарием в выше другой ответ:

«Я посылаю мой E_ID. Я не хочу сопоставлять и получать. Я отправляю свой E_ID и , если этот идентификатор доступен. Я вставляю эти данные в свою временную таблицу и изменяю статус temp таблицы как «Модифицированный» и в противном случае ничего не делаю ».

В соответствии с вашим выше заявлением, если данный e_id находится там он будет копировать все значения столбца в table1 и поместить значение «модифицированное» в столбце «Статус» вашего table1

Для подробнее смотрите here

+0

Спасибо, что хорошо работаем.Но я не могу понять, как автоматически обрабатывать, когда есть подходящие значения для условия. – user2632766

+0

Я хочу добавить запрошенные значения id в таблицу temp и изменить статус столбца temp_table как «Изменено». – user2632766

+0

Я отредактировал свой ответ и добавил что-то. Возможно, я ошибаюсь, чтобы понять ваше требование. Если да, то дайте мне знать более подробно. –

0
insert into tablename(column1, column2, column3,column4) SELECT column1, 
column2, column3,column4 from anothertablename where tablename.ID=anothertablename.ID 

Если несколько значений есть, то он вернет последний result..If вы не сузить свой поиск ..

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