根据字段插入行

Posted

技术标签:

【中文标题】根据字段插入行【英文标题】:Inserting rows depending on fields 【发布时间】:2016-12-31 20:51:27 【问题描述】:

我有一个临时表 Temp_Table,根据它的两个字段,我需要在其他表 Table1 和 Table2 中插入行

这些是实现这些的条件,

    如果 Temp_Table.Field1 = Table1.Field1 和 Temp_Table.Field2 > Table1.Field2 然后,将该行从 Table1 移动到 Table2 并将行从 Temp_Table 复制到 Table1。

    如果 Temp_Table.Field1 = Table1.Field1 并且 Temp_Table.Field2

    如果 Temp_Table.Field1 在 Table1 中找不到任何匹配项,请将 Temp_Table 中的行复制到 Table1。

由于 Table1 和 Table2 都有触发器,所以 output 子句没有用。 Temp_Table 本身可能有 Field1 的重复值,因此需要对每一行进行检查。

我怎样才能仅通过 mysql 实现这一点?

我将尝试展示一些示例数据。所有表都没有自动生成的 id。

表1:

Id         Field1          Field2           Field3
0            1             30 Dec 2016        data1

表2:

Id        Field1           Field2          Field3

临时表:

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

结果表: 表1:

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

表2:

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

【问题讨论】:

@GordonLinoff,谢谢你的提醒。我已经相应地更改了标签。 请向我们展示一些示例数据以及最终结果应该是什么样子。 您尝试过简单的 INSERT/SELECT 吗?类似insert into <destination> select <whatever> from <source> where <filter> @mauro,是的,但是 'where' 子句的 'filter' 给我带来了问题。 12 月 31 日...您是否在 varchar 列中保留日期? 【参考方案1】:

听起来有几个操作需要一起执行,事务是使它们全部工作或全部失败的好方法。

我只提供了伪查询,因为实际使用的查询可能会随着您习惯于尝试做的任何事情而发展。

概念:

存储过程 TRY/CATCH 块 开始/提交/回滚传输 左连接查询以检测缺失记录

例子:

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

【讨论】:

以上是关于根据字段插入行的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 根据字段的值触发插入和/或更新的记录

根据持续时间将行拆分为多行

角度 ng-grid 行高

根据最大值插入具有字段值的记录

根据R中现有行的值插入行

使用雪花中的合并将值插入表并根据条件删除行