在插入之前找到行集,重复列表

时间:2014-02-17 08:47:09

标签: sql tsql

我有表(它是一个包含4个整数的结构列表,第一个id是列表ID)

id | idL  | idA(null) | idB(null) | idC
1  |  1   |    2      |    null   |  1
2  |  1   |    4      |    null   |  1
3  |  1   |   null    |      1    |  1
4  |  2   |    2      |    null   |  1
5  |  2   |    4      |    null   |  1
6  |  3   |    6      |    null   |  1
7  |  3   |   null    |      4    |  1

现在我需要在此表中插入第4个列表

idA    | idB       | idC
2      |    null   |  1
4      |    null   |  1
null   |      1    |  1

但是,它已经存在(list id = 1)

idA    | idB       | idC
2      |    null   |  1
4      |    null   |  1

也存在(idL = 2)

idA    | idB       | idC
2      |    null   |  1
4      |    null   |  1
null   |      7    |  1

不存在。

如何在将表格插入表格之前找到副本

2 个答案:

答案 0 :(得分:0)

似乎只是插入来自(选择不在)。

试试这个例子: SQLFiddle

免责声明:在您提供的示例数据中,第2行和第4行具有相同的idA,idB,idC集。 如果那些列不能形成唯一的,并且你已经在副本表中得到了这个元组,并且你需要在原始表中的每一行的副本表中有一行,那会更难,因为副本中的这样一行没有办法告诉该行原来它是相关的。

答案 1 :(得分:0)

如果值在表temp中,并且您知道列表id。

你可以使用“除外”

例如:

insert into list (idL, idA, idB, idC)
select @list_id, t.idA, t.idB, t.idC
from
(
  select idA, idB, idC
  from @new_values
  except
  select idA, idB, idC
  from list
) t