我正在关注本教程http://blogs.msdn.com/b/miah/archive/2008/02/17/sql-if-exists-update-else-insert.aspx我现在正处理的第一个更艰苦的声明......
我产生了错误,并且不确定附近意味着什么:
错误:ER_PARSE_ERROR:您的SQL语法中有错误;检查与MySQL服务器版本对应的手册,以获得正确的语法,使用附近' IF EXISTS(SELECT * FROM radio WHERE em =' someone@gmail.com' )UPDATE radio'在第1行
这是我的代码:
//var _={'em':'email@address.com','st':'radio_name'};
var mysqlquery=
"IF EXISTS (SELECT * FROM radio WHERE em='"+_.em+"') "+
"UPDATE radio SET ("+
"em='"+_.em+"',"+
"st='"+_.st+"') WHERE em='"+_.em+"' "+
"ELSE "+
"INSERT INTO radio VALUES ("+
"em='"+_.em+"',"+
"st='"+_.st+"')";
我原本以为错误来自我使用变量并启动/停止字符串但我没有看到明显的错误所以我的问题是:
这是mysql或sql的有效语法吗?我正在运行一个mysql数据库,我很想知道这个解析错误产生了什么样的问题
答案 0 :(得分:0)
您有错误的教程或错误的数据库。本教程适用于mssql,您正在运行mysql。
在mysql中你可以使用REPLACE来解决这个问题 http://dev.mysql.com/doc/refman/5.5/en/replace.html
<强>更新强>
您必须传递主键才能替换或查询插入,因为如果您不这样做,mysql将不会重复。您也可以为em添加一个唯一索引,然后您不需要额外的主键。
尝试类似:
"REPLACE INTO radio
VALUES (
SELECT id,'"+_.st+"','"+_.em+"' FROM radio WHERE em='"+_.em+"'
)"
考虑id是你的主键。
重要提示:您的选择必须与列数相匹配,因此如果您有其他列,则选择它们就像ID一样。