例如,现在我有一个这样的表:
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,但是在我的表有数百万条记录的情况下它非常慢
答案 0 :(得分: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
答案 1 :(得分: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