2013-02-20 67 views
1

昨天我问了这个问题:if in mysql insert statement答案很有效。 问题是如果一个值不存在,我需要在表格中插入一行。 f1。sql如果在插入语句时没有选择

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

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

+0

什么,如果值已经存在?你想要什么专栏的价值是独一无二的? – 2013-02-20 12:17:45

+0

我认为你需要PL/SQL来完成这样的任务 – Abubakkar 2013-02-20 12:18:23

回答

1

我假设你的表名为TBL。

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

DUAL纯粹是出于人谁要求所有的SELECT语句应该具有和可能的便利其他条款。MySQL可能忽略的条款。MySQL的不需要FROM DUAL如果没有表被引用。

至于其他一些提到的,你可以在这里使用INSERT IGNORE声明如果您campoX是unigue或主键字段。

+0

否,因为我想插入一个新行当且仅当不存在一行具有特定值 – Martina 2013-02-20 12:25:09

+0

你有两个或一个表吗?只有在没有记录X的情况下,你才想在表A中插入? – iiro 2013-02-20 12:28:22

+0

只有一张桌子。我做一个例子:IF('Max'NOT IN(从年龄= 24的用户中选择姓名)然后插入用户(姓名,年龄)值('max',24) – Martina 2013-02-20 12:30:56

0

关于:

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

mysql给我一个CASE单词的错误。 – Martina 2013-02-20 12:23:55

+0

@ user1856906现在尝试 – 2013-02-20 12:37:23

0

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

你的意思是说你只想添加一行数据库中没有数据的地方?如果是这样,那么确保你已经在表上定义了主键或唯一键,然后执行INSERT - 但忽略重复的键错误。事实上,与MySQL可以完全使用“INSERT IGNORE ....”抑制差错发生的重复键

+0

问题是我不想对主键进行控制,而是对一个也可以为空的属性进行控制。 – Martina 2013-02-20 12:35:15

1

使用双表:

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