0

例如现在我有一个这样的表:

Col1      Col2  Col3    Col4
1         1     1       1
11        2     3       44
111       2     3       444
1111      3     3       3

我有另一个具有相同结构的表,除了它有一个唯一索引,包括 Col2 和 Col3。所以,我想从第一个表中选择并插入到第二个表中,但跳过具有相同唯一索引的记录。所以我可以有一个新表,其中包含如下数据:

Col1      Col2  Col3    Col4
1         1     1       1
11        2     3       44
1111      3     3       3

我怎样才能做到这一点 ?

目前我正在使用 Merge Into,但是在我的表有数百万条记录的情况下,它非常慢

4

2 回答 2

3

我怀疑你能比合并做得更好,但你可以尝试优化你的合并查询。也许发布您当前使用的查询?无论如何,在这些情况下,分析往往很快。例如,类似于以下内容:

SELECT Col1, Col2, Col3, Col4
FROM (
    SELECT Col1,
           Col2,
           Col3,
           Col4,
           MIN(Col1) OVER (PARTITION BY COL2, COL3) AS MinCol1
    FROM someTable
) Temp
WHERE Col1 = MinCol1
于 2013-07-26T08:07:54.600 回答
3

试试这个查询,没有唯一索引/约束 -

询问:

DECLARE @temp TABLE
(
       Col1 VARCHAR(10)
     , Col2 VARCHAR(10)
     , Col3 VARCHAR(10)
     , Col4 VARCHAR(10)
)

INSERT INTO @temp (Col1, Col2, Col3, Col4)
VALUES 
     ('1',     '1', '1', '1'),
     ('11',    '2', '3', '44'),
     ('111',   '2', '3', '444'),
     ('1111',  '3', '3', '3')

SELECT
      Col1 = MIN(Col1)
    , Col2
    , Col3
    , Col4 = MIN(Col4)
FROM @temp
GROUP BY
      Col2
    , Col3

输出:

Col1       Col2       Col3       Col4
---------- ---------- ---------- ----------
1          1          1          1
11         2          3          44
1111       3          3          3
于 2013-07-26T07:52:35.847 回答