Mysql 不带select的insert语句中的sql if
昨天我问了这个问题:答案很好。 问题是,如果值不存在,我需要在表中插入一行。 f、 eMysql 不带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'
我该怎么办?在互联网上我找不到答案:我想你的表名是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);