我搜索的方式在數據庫(MySQL的)進入DATAS,如果他們不DB中還存在:是這樣的:MySQL查詢插入其中不存在
INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
WHERE NOT EXISTS (SELECT * FROM TABLE)
什麼錯此查詢?
我搜索的方式在數據庫(MySQL的)進入DATAS,如果他們不DB中還存在:是這樣的:MySQL查詢插入其中不存在
INSERT INTO TABLE(id,name,surname) VALUES('','name1','surname1')
WHERE NOT EXISTS (SELECT * FROM TABLE)
什麼錯此查詢?
雖然您不能在上述查詢中使用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;
而且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')
有之前做功課的建議問。如果你在谷歌或計算器的樣子,你可以找到一個類似的問題對你的:
MySQL: Insert record if not exists in table
我相信會解決您的問題。
要清楚:不,您不能在INSERT中使用WHERE。但是,您可以鎖定表以避免將記錄插入到現有位置。這稱爲CONSTRAINT,需要從表創建中聲明。
您需要的一切都在鏈接的問題中。
比方說你有定義的表如下:
+------+ +------+
|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,但它應該是在球場上。
你得到的錯誤是什麼? – Jocelyn 2013-03-25 18:36:31