多个插入行(如果不存在)(基于多个列)

时间:2014-09-02 09:42:53

标签: mysql

想象一下包含数据的现有表(名称是不言自明的):

idnametelephone_1telephone_2

我想用一个INSERT插入多个新记录(希望多个新记录有一个插入 - 如果有问题我可以回退一个一个插入),但我想要一个新行到只有在新记录的telephone_1telephone_2尚未存在 telephone_1或现有记录的telehpone_2时才会添加

这意味着如果我们有现有数据

1, Jimmy, 123, 456

我不应该添加

NULL,John,444,123

因为约翰的telephone_2已经存在于吉米的telephone_1

我打算让mysql做繁重的工作而不是我的程序,但我怎么能这样做呢?我在过去使用UNIQUE索引做了类似的事情,但在这种情况下的问题是列是2. telephone_1不应该与telephone_1 碰撞而且< / strong>不应与telephone_2发生冲突(telephone_2相同)

UPDATE-CLARIFICATION:我试图插入的数据不是来自另一个表;它们是从我的程序中动态生成的。

2 个答案:

答案 0 :(得分:1)

假设您的表名为contacts,然后尝试插入记录:

INSERT INTO contacts(name,telephone_1,telephone_2)
 SELECT 'John', 444, 123
 FROM contacts
 WHERE telephone_1 NOT IN (444, 123)
 AND telephone_2 NOT IN (444, 123)
 LIMIT 1;

欺骗那里:如果WHERE条件为假,则SELECT不返回任何行,并且未插入记录。

在此尝试:http://sqlfiddle.com/#!2/5a6e0/1

答案 1 :(得分:0)

试试这个:

Insert into tableA select * from tableB where tableB.telephone_1 not in (select telephone_1 tableA union select telephone_2 tableA ) AND tableB.telephone_2 not in (select telephone_1 tableA union select telephone_2 tableA )

其中

tableA是您要插入新记录的主表。 tableB是您要从中获取记录的其他表