2014-09-02 56 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