想象一下包含数据的现有表(名称是不言自明的):
id
,name
,telephone_1
,telephone_2
我想用一个INSERT
插入多个新记录(希望多个新记录有一个插入 - 如果有问题我可以回退一个一个插入),但我想要一个新行到只有在新记录的telephone_1
或telephone_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:我试图插入的数据不是来自另一个表;它们是从我的程序中动态生成的。
答案 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不返回任何行,并且未插入记录。
答案 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是您要从中获取记录的其他表