Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 不带select的insert语句中的sql if_Mysql_Sql_If Statement - Fatal编程技术网

Mysql 不带select的insert语句中的sql if

Mysql 不带select的insert语句中的sql if,mysql,sql,if-statement,Mysql,Sql,If Statement,昨天我问了这个问题:答案很好。 问题是,如果值不存在,我需要在表中插入一行。 f、 e 我该怎么办?在互联网上我找不到答案:我想你的表名是tbl INSERT INTO tbl (campoX ) SELECT 'X' FROM DUAL WHERE NOT EXISTS( SELECT campoX from tbl WHERE campoX ='X'

昨天我问了这个问题:答案很好。 问题是,如果值不存在,我需要在表中插入一行。 f、 e


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

我想你的表名是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语句。

关于:

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

发明编程语言并不是描述问题的最恰当方式

您的意思是只想添加一行,而该行中的数据并不一定存在于数据库中?如果是这样的话,那么请确保在表中定义了主键或唯一键,并执行插入操作,但忽略重复键错误。事实上,使用MySQL,您可以使用“插入忽略…”完全抑制重复键的错误生成。

使用双表:

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

如果该值已经存在怎么办?您希望哪个列的值是唯一的?我想您需要PL/SQL来完成这样的任务否,因为我想插入新行,当且仅当不存在具有特定值的行时,您是否有两个或一个表?仅当没有记录X?只有一个表时,才希望在表A中插入。我举了一个例子:如果'Max'不在select name from user中,其中age=24,则插入用户名中,age值'Max',24问题是我不想对主键执行控制,而是对也可以为null的属性执行控制。
INSERT INTO campoX (col1, col2, col3)
SELECT value1, value2, value3
FROM dual
WHERE NOT EXISTS(SELECT * 
                 FROM campoX 
                 WHERE col1=value1);