2014-09-02 24 views
0

想象一下,数据的现有表(名字不言自明):多个插入行,如果不存在(基于多列)

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碰撞,也不应与telephone_2(和同为telephone_2

碰撞

UPDATE-CLARIFICATION:我想要插入的数据不是从另一个表格;它们是从我的程序中随时产生的。

回答

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条件为假,则选择不返回行和记录未插入。

试试这里:http://sqlfiddle.com/#!2/5a6e0/1

+0

我喜欢这个! :D – Sharky 2014-09-02 10:43:10

+1

@Sharky:小修正增加了'LIMIT 1;'来查询 – Rimas 2014-09-02 14:41:05

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的是要获取记录

+0

没有'TableB',即时通讯从我的应用程序获取数据。 – Sharky 2014-09-02 09:51:10

+0

@Sharky您可能需要临时表。或者你似乎需要一些程序。 – sri 2014-09-02 09:52:08

+0

@sri谢谢你的回答,是子查询唯一的方法吗?有更优雅的东西吗? – Sharky 2014-09-02 09:54:56