我有表(它是一个包含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
不存在。
如何在将表格插入表格之前找到副本
答案 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