我需要根据从以下两个表中提取的数据创建一个新表:
第一表:
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)。
new_number <cur_number
在我的示例中,新表将为:
Var Number A 10 A 2 B 8 B 4 B 6
数据库非常大,运行时间至关重要,因此我无法在两个表上使用UNION …
试试这个:
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
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);
这会将两个表的值合并到第一个表中。第一个表将包含:
VAR CUR_NUMBER A 10 B 8 A 2 B 4 B 6
注意: 使用时MERGE:
INSERT
WHEN MATCHED
>=
WHEN NOT MATCHED