【问题标题】:Insert data from one table to another where one column matches in both efficiently将数据从一个表插入到另一个表中,其中一列有效地匹配两者
【发布时间】:2021-06-11 23:48:02
【问题描述】:

我有两个表,“BLANKTABLE”和“ACTIVETABLE”。它们具有相同的列“公司、城市、州”。活动表每列有数百万条记录,BLANK 表只填写了“公司”列(其他列为空)。两者之间有很大的重叠。

我想将 ACTIVETABLE 中的行数据(城市和州)插入到 BLANKTABLE 中,其中公司字段在两者上都匹配。因此,如果两个表的公司列中都有公司“示例”,它会将 ACTIVE 中的城市和州数据插入到 BLANK 中,基本上是从 ACTIVE 中克隆该行。我的第一个想法是这个,但我觉得它的效率非常低。

INSERT INTO BLANKTABLE
  (Company, [City], [State])
SELECT de.company,
       de.[city],
       de.[state]
  FROM [ACTIVETABLE] de
 WHERE EXISTS(SELECT website, company, zip
                    FROM BLANKTABLE d2
                   WHERE d2.company = de.company)

有什么想法吗?

更新:

其实,也许就是这样

UPDATE blanktable
SET    blanktable.city = activetable.city,
       blanktable.state = activetable.state
FROM   blanktable d2
       INNER JOIN activetable de
               ON d2.company = de.company; 

对吗?

【问题讨论】:

  • 如果要插入新行,使用第一种方法。如果要更新现有行,请使用第二个。我不清楚你的问题是什么。
  • 我想更新行,而不是插入新行。我现在意识到第一个查询是多么愚蠢!谢谢
  • 编辑你的问题,很困惑你想要什么,更新还是插入?

标签: sql sql-server database


【解决方案1】:

在我看来,任何公司都有多个 ActiveTable 行,您希望按公司汇总,然后更新 BlankTable(如果您在 ActiveTable 中找到位于 BlankTable 中的公司,则可能添加到 BlankTable )。

如果您使用 Merge 语句而不是 Update 或 Insert,我认为整个过程对您来说会更清楚一些。 You can read about the syntax here.

基本上,这里重要的是设计一个针对 ActiveTable 的查询,该查询返回每个公司的一行,其中包含您希望在 BlankTable 中拥有的城市和州的特定值。如果您有可以区分的数据,我建议您使用最新的 ActiveTable 值。可以填空,但基本语法是:

Merge into Blanktable b
Using (Select <company city state values> From activeTable Group By company) a
On B.company = A.company
When Matched Then Update Set b.city = a.city, b.state=a.state
When Not Matched Then Insert (company,city,state) Values (a.company, a.city, a.state)

如果公司存在于 BlankTable 中,则此完整语法更新;如果公司不存在,则插入。如果您不想将记录添加到 BlankTable,只需更新现有记录,然后省略 When Not Matched 部分。

【讨论】:

    【解决方案2】:

    您已经有了问题的答案。您的更新查询应该可以正常工作。

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 2023-03-29
      相关资源
      最近更新 更多