只有在表中不存在某个值时才插入SQL?

只有在表中不存在某个值时才插入SQL?

问题描述:

如何在表中插入一个数字,仅当表中尚未包含该数字时才使用?只有在表中不存在某个值时才插入SQL?

我正在寻找特定的SQL代码,不确定如何处理这个问题。尝试了几件事,没有任何工作。

编辑

表看起来是这样的:

PK ID Value 
1  4  500 
2  9  3 

所以,如果我想INSERT (ID, Value) VALUES (4,100)它不应该试图做到这一点!

+0

不能告诉你,除非你展示什么样的表看起来像 – Hogan

+2

基本上是一个改编的版本的http://*.com/questions/8156931/why-is-my-sql-failing-ora-00933-sql-命令未正确结束 –

尝试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) 
+0

ORA-00969:缺少关键字 – antonpug

+0

我从内存中编写了它,我现在无法访问oracle db。尝试将ON条件更改为[[]] ON(data.id = tbl.id) [...]。这是我现在唯一可能犯的错误。 您还可以查看[此链接](http://psoug.org/reference/merge.html)以获取更多示例。 – Krzysztof

+0

是的,我认为问题在于你必须在ON条件下有()'...我已经编辑了答案,但是由于我没有足够的代表,所以必须对其进行审查。 :) – bhamby

INSERT INTO YOUR_TABLE (YOUR_FIELD) 
SELECT '1' FROM YOUR_TABLE YT WHERE YT.YOUR_FIELD <> '1' LIMIT 1 

当然,这 '1' 将是你的电话号码或您的变量。 您可以使用INSERT + SELECT解决此问题。

+0

不起作用 - 仍然插入,但数字已经在那里。 – antonpug

+0

只有在表格中有一行时,它才有效。 'INSERT INTO tbl(ID,Value)SELECT 4,100 WHERE NOT EXISTS(SELECT 1 FROM tbl WHERE ID = 4)'应该可以工作。 – Krzysztof

如果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,而不是插入新行。