sql如果在insert语句中没有select

时间:2013-02-20 12:16:19

标签: mysql sql if-statement

昨天我问了这个问题:if in mysql insert statement,答案很有效。 问题是如果值不存在,我需要在表中插入一行。 f.e。

 If('x' NOT EXIXTS in (select campoX from table) then
 insert into table (...) values (...) etc.

我该怎么办?在互联网上我找不到答案:(

4 个答案:

答案 0 :(得分:1)

我假设您的表名为tbl。

INSERT INTO tbl (campoX ) 
    SELECT 'X' FROM DUAL 
    WHERE NOT EXISTS( 
                      SELECT campoX from tbl 
                      WHERE campoX ='X'
                     );

DUAL纯粹是为了方便那些要求所有SELECT语句都应具有FROM和可能的其他子句的人。 MySQL可能会忽略这些子句。如果没有引用表,MySQL不需要FROM DUAL。

正如其他人提到的,如果你的campoX是一个unigue或主键字段,你可以在这里使用INSERT IGNORE语句。

答案 1 :(得分:1)

使用双表:

INSERT INTO campoX (col1, col2, col3)
SELECT value1, value2, value3
FROM dual
WHERE NOT EXISTS(SELECT * 
                 FROM campoX 
                 WHERE col1=value1);

答案 2 :(得分:0)

怎么样:

CASE 
    WHEN 'X' NOT EXIST IN (SELECT campoX FROM yourTable) THEN 
    INSERT INTO yourTable (...) VALUES (...) 
END CASE

答案 3 :(得分:0)

发明编程语言不是描述问题的最合适方式。

你的意思是你只想添加一个数据库中不存在数据的行吗?如果是这样,那么请确保您已经在表上定义了主键或唯一键并且仍然执行INSERT - 但忽略重复键错误。实际上,使用MySQL,您可以通过使用“INSERT IGNORE ....”来完全抑制错误生成的重复键。