【问题标题】:SQL Append querySQL 追加查询
【发布时间】:2016-12-09 02:32:03
【问题描述】:

请帮忙,我在下面有两个表 Table_A 和 Table_B,我想将 Table_B 中的数据附加到 Table_A 中,其中 Table_A.C1 = Table_B.C1。 Table_A 最终结果如下。

Table_A 
C1      | C2      
-------- ---------
1@a.com | e@a.com 


Table_B 
C1      | C2      
-------- ---------
1@a.com | abc@.com 

**FINAL RESULT**

Table_A 
C1      | C2      
-------- ---------
1@a.com | e@a.com; abc@.com 

【问题讨论】:

  • 你有没有做过什么来解决这个问题?
  • 您使用的是哪个 DBMS?
  • 另外,如果两个表中的 c2 列的数据相同怎么办。你仍然想要追加还是只是在它不同的时候?

标签: sql


【解决方案1】:
update ta
set ta.c2 = ta.c2 + ';' + tb.c2
from Table_A ta
inner join Table_B tb on tb.C1 = ta.c1

【讨论】:

  • 那是非标准 SQL
  • 他要求符合 ANSI 标准吗? Table_A 是 Microsoft 的默认设置,我也可以通过他复制的输出来判断。它似乎对他有用....chillllllll out
  • sql 标签指的是标准 SQL。您至少应该说明这是针对哪个 DBMS
  • @jp2631 下次tag TSQL 不然neo社区会吃掉你
【解决方案2】:

我建议的第一件事是良好的数据库规范化,这可能会使您试图解决的问题变得毫无意义。见Database Normalization

如果您的数据库尽可能规范化,那么最好的办法是让表 A 单独存在并创建一个视图,其中的行由表 A 和表 B 之间的“匹配”组成。这是一个非常糟糕的数据库表单在一个列中有多个值。

使用:CREATE VIEW table_A_table_B AS SELECT * FROM Table_A JOIN Table_B ON Table_B.C1 = Table_A.C1。

视图的优点是每次更新 Table_A 或 Table_B 时,视图“表”都会更新。

【讨论】:

    【解决方案3】:

    您可以使用 ANSI MERGE:

    MERGE table_a a
    USING table_b b
    ON a.c1 = b.c1
    WHEN matched THEN
    UPDATE SET a.c2 = a.c2 || ';' || b.c2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多