只有在表中不存在某个值时才插入SQL?
问题描述:
如何在表中插入一个数字,仅当表中尚未包含该数字时才使用?只有在表中不存在某个值时才插入SQL?
我正在寻找特定的SQL代码,不确定如何处理这个问题。尝试了几件事,没有任何工作。
编辑
表看起来是这样的:
PK ID Value
1 4 500
2 9 3
所以,如果我想INSERT (ID, Value) VALUES (4,100)
它不应该试图做到这一点!
答
尝试MERGE语句:
MERGE INTO tbl USING
(SELECT 4 id, 100 value FROM dual) data
ON (data.id = tbl.id)
WHEN NOT MATCHED THEN
INSERT (id, value) VALUES (data.id, data.value)
答
INSERT INTO YOUR_TABLE (YOUR_FIELD)
SELECT '1' FROM YOUR_TABLE YT WHERE YT.YOUR_FIELD <> '1' LIMIT 1
当然,这 '1' 将是你的电话号码或您的变量。 您可以使用INSERT + SELECT解决此问题。
答
如果ID
应该是唯一的,那么应该在表上定义唯一的约束。如果您尝试插入已经存在
ALTER TABLE table_name
ADD CONSTRAINT uk_id UNIQUE(id);
您可以捕获错误并做了什么价值,如果试图插入重复你想从忽略key--任何会引发错误错误日志和重新提高例外养自定义异常
BEGIN
INSERT INTO table_name(id, value)
VALUES(4, 100);
EXCEPTION
WHEN dup_val_on_index
THEN
<<do something>>
END;
您也可以编写代码INSERT
以便让它能够插入0行(你还是想无论是从数据模型的角度来看到位的唯一约束和因为它为优化程序提供了更多信息并可能使未来的查询效率更高)
INSERT INTO table_name(id, value)
SELECT 4, 100
FROM dual
WHERE NOT EXISTS(
SELECT 1
FROM table_name
WHERE id = 4)
或者您也可以编码MERGE
,以便将VALUE
列从500更新为100,而不是插入新行。
不能告诉你,除非你展示什么样的表看起来像 – Hogan
基本上是一个改编的版本的http://stackoverflow.com/questions/8156931/why-is-my-sql-failing-ora-00933-sql-命令未正确结束 –