【问题标题】:Insert specified columns from multiple tables into one table, using WHILE loop使用 WHILE 循环将多个表中的指定列插入到一个表中
【发布时间】:2015-05-26 21:22:46
【问题描述】:

我有 3 张桌子。我必须从其中两个表中选择几个指定的列,然后将它们插入到一个表中。但是,当我试图将它们“合并”为一个时,它不会像我预期的那样进行。

[表A]

Col_A    Col_B    Col_C    Col_D ...
  101       10       15      AAA
  102       20       25      BBB

[表B]

Col_D    Col_E    Col_F    Col_G ...
  201       30       35      CCC
  202       40       45      DDD

[TableC]('目标'表)

   Column_01             Column_02            Column_03 ...
TableA.Col_A-Row1     TableA.Col_B-Row1            0
       0                     0            TableB.Col_E-Row_1 ...
TableA.Col_A-Row2     TableA.Col_B-Row2            0
       0                     0            TableB.Col_E-Row_2 ...
       0                     0            TableB.Col_E-Row_3 ...
       0                     0            TableB.Col_E-Row_4 ...

我需要将 TableA 和 TableB 中的一些列(不是全部)插入到 TableC 中,并且在插入 TableA 列时,必须将默认值(在本例中为 0)插入到其余列中。对于 TableB 的情况也是如此。 这些插入操作的一个巧妙之处在于,TableA 与 TableB 的记录之间存在 1toN 的关系。

现在我想通过简单的查询来实现它,如下所示:

INSERT INTO TableC (
  Column_01, Column_02, Column_03 ...
)
SELECT 
  TableA.Col_A, Table_A.Col_B, 0 ...
FROM TableA

但我也听说我可以在 TableA 的循环中使用 Cursor 来迭代 TableB...

有没有办法解决这个问题?我已经阅读了几本 TSQL 和 SQL Server 编程书籍,但没有一本描述了这样的“对设计不良的表的查询”,只是简单的 SQL 基础知识。

我知道这不是那么复杂的问题,但我是存储过程和 TSQL 的新手,我不知道从哪里开始。

谢谢。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    使用光标可能是个坏主意。由于tableA和tableB之间没有匹配列(无关系);您可能可以使用UNIONinsert into select from 之类的方法

    INSERT INTO TableC (
      Column_01, Column_02, Column_03 ...
    )
    SELECT 
      TableA.Col_A, Table_A.Col_B, 0 ...
    FROM TableA
    UNION
    SELECT 0, 0, TableB.Col_D, TableB.Col_E, ...
    FROM TableB
    

    【讨论】:

    • 感谢您的快速回答和详细解释!对不起,我不清楚,糟糕的描述。不幸的是,TableA 和 B 之间存在一对 N 的关系,这让我很恼火。如果 SQL 过程可以使用数组,那将是一件容易的事。
    • 几乎一个月后,除了 Rahul,没有人提出解决方案。虽然我不被允许使用 UNION(因为表的关系有点混乱),但对于任何有类似问题的人来说,这将是一个很大的帮助。所以我接受他的解决方案作为这个案例的答案。谢谢你,拉胡尔!
    猜你喜欢
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2018-10-04
    • 2019-11-02
    相关资源
    最近更新 更多