2016-12-31 5 views
3

у меня есть временный стол, Temp_Table, и в зависимости от его двух полей мне нужно вставить строки в других таблицах, Table1 и Table2Вставка строк в зависимости от полей

Таковы условия для их достижения,

  1. Если Temp_Table.Field1 = Table1.Field1 и Temp_Table.Field2> Table1.Field2 Затем переместите строку из таблицы 1 в таблицу2 и скопируйте строку из Temp_Table в таблицу1.

  2. Если Temp_Table.Field1 = Table1.Field1 и Temp_Table.Field2 < Table1.Field2 Затем скопируйте строку из Temp_Table в Table2.

  3. Если Temp_Table.Field1 не находит соответствия в таблице 1, скопируйте строку из Temp_Table в таблицу1.

Как и в случае с таблицами 1 и Table 2, выходное предложение бесполезно. Сам объект Temp_Table может иметь повторяющиеся значения для Field1, поэтому проверка должна выполняться для каждой строки.

Как я могу достичь этого только mySql?

Я попытаюсь показать некоторые примеры данных. Все таблицы не имеют автогенерированного идентификатора.

Table1:

Id   Field1   Field2   Field3 
0   1    30 Dec 2016  data1 

Table2:

Id  Field1   Field2   Field3 

Temp_Table:

Id  Field1   Field2   Field3 
1   1    29 Dec 2016  data2 
2   2    31 Dec 2016  data3 
3   2    01 Jan 2017  data4 

Результат таблицы: Table1:

Id  Field1  Field2   Field3 
0   1   30 Dec 2016  data1 
3   2   01 Jan 2017  data4 

Tabl2:

Id   Field1   Field2   Field3 
1   1   29 Dec 2016  data2 
2   2   31 Dec 2016  data3 
+0

@GordonLinoff, спасибо, что напомнил. Я изменил теги соответственно. – Nets

+0

Пожалуйста, покажите нам некоторые примеры данных и как должен выглядеть конечный результат. –

+0

Вы попробовали простой INSERT/SELECT? Что-то вроде 'insert into выберите из , где ' – mauro

ответ

0

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

Я предоставлял только псевдо-запросы, потому что, по-видимому, используемые вами запросы будут развиваться по мере того, как вы привыкнете к тому, что вы пытаетесь сделать.

Концепции:

  • хранимых процедур
  • TRY/CATCH блок
  • Начало/Commit/Откат Tran
  • Left Регистрация запросов для обнаружения отсутствующих записей

Пример:

begin proc Abc as 
begin 
    begin try 
    begin tran 
     --Step 1 
     Insert Table2 select Table1 
     Delete from Table1 
     insert into Table1 select TempTable 
     --Step 2 
     insert into Table2 select TempTable 
     --Step 3 
     insert into Table1 select TempTable left join Table1 
    commit tran 
    end try 
    begin catch 
    rollback tran 
    end catch 
end 
Смежные вопросы