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

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

这些是实现这些的条件,

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

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

  3. 如果 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 列中保留日期?

标签: sql sql-server sql-server-2014


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 2018-06-19
    • 2014-05-09
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多