2013-03-25 99 views
1

我搜索的方式在數據庫(MySQL的)進入DATAS,如果他們不DB中還存在:是這樣的:MySQL查詢插入其中不存在

INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1') 
WHERE NOT EXISTS (SELECT * FROM TABLE) 

什麼錯此查詢?

+0

你得到的錯誤是什麼? – Jocelyn 2013-03-25 18:36:31

回答

6

雖然您不能在上述查詢中使用NOT EXISTS,但您可以使用子查詢。下面是一個使用LEFT JOIN和一個子查詢做到這一點的一種方法:

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname 
FROM 
    (SELECT 'name1' name,'surname1' surname) a 
    LEFT JOIN yourtable b ON 
     a.name = b.name AND a.surname = b.surname 
WHERE b.name IS NULL; 

SQL Fiddle Demo

而且NOT EXISTS方法:

INSERT INTO yourtable (name, surname) 
SELECT a.name, a.surname 
FROM 
    (SELECT 'name1' name,'surname1' surname) a 
WHERE NOT EXISTS (
     SELECT 1 
     FROM yourtable 
     WHERE name = 'name1' and surname = 'surname1') 

More Fiddle

0

有之前做功課的建議問。如果你在谷歌或計算器的樣子,你可以找到一個類似的問題對你的:

MySQL: Insert record if not exists in table

我相信會解決您的問題。

要清楚:不,您不能在INSERT中使用WHERE。但是,您可以鎖定表以避免將記錄插入到現有位置。這稱爲CON​​STRAINT,需要從表創建中聲明。

您需要的一切都在鏈接的問題中。

0

比方說你有定義的表如下:

+------+ +------+ 
|Names | |Add | 
+------+ +------+ 
|ID | |ID | 
|FName | |FName | 
|LName | |LName | 
+------+ +------+ 

如果你想插入添加表到名稱表而不會重複,你可以使用下面的SELECT語句來創建每個插入語句行你需要。這也爲創建審計追蹤提供了額外的好處。

Select CONCAT('INSERT INTO Names \(ID, FName, LName\) VALUES \(',a.ID,',',a.FName,',',a.LName,'\)') 
From Add a LEFT JOIN Names N on a.ID = n.ID AND a.FName = n.FName AND a.LName = n.FName 
Where n.ID is null; 

我不確定我的語法是否完美,因爲我不使用mySQL,但它應該是在球場上。