IF NOT EXISTS(SELECT * FROM `user` WHERE `name`='Rutvij' AND `lang`='python')
BEGIN
INSERT INTO `user` VALUES ('Rutvij', 'python', 25)
END
ELSE
BEGIN
UPDATE user SET `name`='Kanzaria' WHERE `name`='Rutvij'
END我正在phpmyadmin sql区域中尝试上述查询。我在用xampp。它正在抛出错误,声明
1064 -您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以便在第1行中正确使用“如果存在”(选择*来自用户)选择名称。
我也尝试了下面的代码
IF NOT EXISTS(SELECT * FROM user WHERE name='Rutvij' AND lang='python')
BEGIN
INSERT INTO user VALUES ('Rutvij', 'python', 25)
END
ELSE
BEGIN
INSERT INTO user VALUES ('Kanzaria', 'python', 25)
END挣扎了这么久。帮帮忙吧。谢谢!!
发布于 2016-03-05 21:40:01
MySQL不允许if逻辑,除非您处于编程块(存储过程、触发器或函数)中。
幸运的是,您可以对WHERE逻辑执行相同的操作:
INSERT INTO user
SELECT 'Rutvij', 'python', 25
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python')
UNION ALL
SELECT 'Kanzaria', 'python', 25
FROM DUAL
WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');MySQL应该在INSERT之前处理SELECT,因此应该只插入一行。
或者,您可以将其作为两个INSERT,但顺序相反:
INSERT INTO user
SELECT 'Kanzaria', 'python', 25
FROM DUAL
WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');
INSERT INTO user
SELECT 'Rutvij', 'python', 25
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python');发布于 2016-03-05 21:20:59
这不是一个查询,这将是一个带有控制流逻辑的sql脚本,它不允许在mysql之外存储程序(过程、函数、触发器)。即使您将上述代码封装到存储过程中,它也不会工作,因为exist / not只能在子查询中使用。
我要做以下几点:
name='Rutvij' AND lang='python'中的行数提取到变量中。https://stackoverflow.com/questions/35819895
复制相似问题