一尘不染

用SQL中另一个表中的列更新表

sql

我需要根据从以下两个表中提取的数据创建一个新表:

第一表:

Var     cur_number
-------------------
 A        10
 B         8

第二张表:

Var    new_number
-------------------
 A          2
 A         11
 B          4
 B          6

新表应包含一个“ Var”列和一个“Number”列,其中每个变量将包含一行带有cur_number的行,其余各行将包含第二个表的new_number列中的数字,其中new_number <cur_number。例如,在上面显示的示例中,对于A,将有一行,行数为10(其cur_number),另一行为“ 2”(因为2 <10,但是11>10)。

在我的示例中,新表将为:

Var         Number
 A            10
 A            2
 B            8
 B            4
 B            6

数据库非常大,运行时间至关重要,因此我无法在两个表上使用UNION …


阅读 130

收藏
2021-05-23

共1个答案

一尘不染

试试这个:

SELECT var, cur_number
FROM FirstTable
UNION
SELECT t2.var, t2.new_number
FROM Firsttable t1
INNER JOIN SecondTable t2 ON t2.new_number < t1.cur_number;

更新: 如果您使用的是SQL Server 2008或更高版本,则可以
MERGE
将两个表合并为一个表,如下所示:

MERGE INTO FirstTable AS TGT
USING SecondTable AS SRC
  ON  SRC.new_number >= TGT.cur_number
WHEN NOT MATCHED THEN
  INSERT (var, cur_number)
  VALUES (SRC.var, SRC.new_number);

sqlfiddle

这会将两个表的值合并到第一个表中。第一个表将包含:

VAR    CUR_NUMBER
A          10
B          8
A          2
B          4
B          6

注意: 使用时MERGE

  • 您必须MERGE使用分号终止该语句,这是强制性的。
  • 你不能INSERT里面WHEN MATCHED这就是为什么我用了反向条件>=WHEN NOT MATCHED
2021-05-23