[英]MySQL syntax error : where not exists
我一直在嘗試在數據庫中插入一條不存在的記錄,這是查詢:
insert into evt(e_id, t_id)
values( '1597', '4')
where not exists( select id from evt where e_id = '4' and t_id = '1597');
該查詢返回以下錯誤:
錯誤1064(42000):您的SQL語法有錯誤; 檢查與您的MySQL服務器版本相對應的手冊以獲取正確的語法,以在“不存在的地方附近使用(在第1行的evt中選擇id,其中e_id ='4'和t_id ='
我不明白為什么它不起作用
嘗試這個 :
INSERT INTO evt(e_id, t_id)
SELECT * FROM (SELECT '4', '1597') AS tmp
WHERE NOT EXISTS (
SELECT e_id FROM evt WHERE e_id = '4' and t_id = '1597'
) LIMIT 1;
MySQL INSERT語法不支持WHERE條件
insert into evt(e_id, t_id) values( '1597', '4')
可能是您需要更新
update evt
set e_id = '1597',
t_id = 4
where id not in ( select id from evt where e_id = '4' and t_id = '1597');
或插入選擇
insert into evt(e_id, t_id)
select '1597', '4'
from evt
where not exists( select id from evt where e_id = '4' and t_id = '1597');
如果要防止數據庫中出現重復項,請讓數據庫完成工作。 使用唯一約束或索引:
create unique index unq_evt_eid_tid on evt(e_id, t_id);
這將確保數據完整性,無論如何插入或更新值。 數據庫為您完成工作。
然后,可以通過使用on duplicate key update
來防止插入時出錯:
insert into evt(e_id, t_id)
values (1597, 4)
on duplicate key update e_id = values(e_id);
on duplicate key
可以防止代碼生成錯誤。
我還從值中刪除了單引號。 編號通常是數字。 如果它們確實是字符串,請添加引號。
嘗試這個:
insert into evt(e_id, t_id) values( '1597', '4') where not in( select id from evt where e_id = '4' and t_id = '1597');
INSERT語句不支持WHERE子句。
您有多種選擇。 首先進行選擇,如果條件為真,則插入或使用ON DUPLICATE KEY
INSERT INTO evt
SET e_id = '1597', t_id = '4'
ON DUPLICATE KEY UPDATE
e_id = '1597', t_id = '4'
這需要您的字段成為索引(主索引或唯一索引)
注意:插入數字時,您不應該使用引號,因為mysql將其視為字符串,並嘗試進行轉換,並逐漸減慢您的項目速度。 同樣,插入沒有引號的數字更安全
我解決了所有問題,添加了一個像這樣的獨特對:
ALTER IGNORE TABLE mytable ADD UNIQUE (field1,field2)
我認為您正在尋找UPDATE而不是插入?
UPDATE `evt` SET `e_id`='1597', `t_id`='4'
WHERE `e_id` NOT in ('4') and `t_id` not in('1597');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.