Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.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 insert_Mysql - Fatal编程技术网

仅当表为空时执行mysql insert

仅当表为空时执行mysql insert,mysql,Mysql,在这个问题之后,我一直在尝试模拟正确的答案,仅当数据为空时才在表中插入数据 这是我的代码: INSERT INTO `statuses` SELECT ('Something', 'Something else', 123), ('Something', 'Something else', 234) WHERE NOT EXISTS (SELECT * FROM `statuses`); 但是如果表为空,我没有添加元素,而是得到: #1064 - You have

在这个问题之后,我一直在尝试模拟正确的答案,仅当数据为空时才在表中插入数据

这是我的代码:

INSERT INTO `statuses` SELECT 
    ('Something', 'Something else', 123),
    ('Something', 'Something else', 234)
    WHERE NOT EXISTS (SELECT * FROM `statuses`);
但是如果表为空,我没有添加元素,而是得到:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT * FROM `statuses`)'

我应该如何准确地编写查询,以便仅在表为空时插入值?

您的语句中有语法错误:

INSERT INTO `statuses`
    (SELECT  'Something', 'Something else', 123
     WHERE NOT EXISTS (SELECT * FROM `statuses`)
    ) union all
    (SELECT 'Something', 'Something else', 234
     WHERE NOT EXISTS (SELECT * FROM `statuses`)
    );
在这种情况下,您需要重复
where
两次,每个子查询重复一次。您还可以执行以下操作:

INSERT INTO `statuses`
    select t.*
    from ((SELECT  'Something' as col1, 'Something else' as col2, 123 as col3
          ) union all
          (SELECT 'Something', 'Something else', 234
          )
         ) t
    WHERE NOT EXISTS (SELECT * FROM `statuses`);
在此版本中,需要为列指定名称

或者,您可以只使用两个单独的insert语句。

正确的语法是:

INSERT INTO user_authentication
SELECT t.*
FROM ((SELECT 1 as col1, 'kingston' as col2, 'test' as col3, true as col4)) t
WHERE NOT EXISTS (SELECT * FROM user_authentication);

这对我很有用。

首先,它应该是值,而不是第一个选择。链接问题中的顶部答案表示不同。我试图复制发布的代码:它告诉我不要使用值。第一个错误告诉我:“您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以了解在“WHERE not EXISTS(SELECT*FROM
statuses
)附近使用的正确语法。union all选择'Something','在第3行”@土星。。。我唯一能想到的就是解析问题。我添加了括号以防止出现这种情况。在实践中,我通常将
union
语句放在
from
子句中,就像在第二个查询中一样。第一个仍然不起作用(与以前的错误相同),但第二个很好,谢谢!