MySQL If(SELECT count(*)返回#1064错误

时间:2011-08-10 19:08:58

标签: mysql select if-statement count mysql-error-1064

我正在尝试创建一个SQL语句来检查表是否存在记录,如果不存在,则会添加记录。如果确实存在,则会将字段的值更改为TRUE。

If  (SELECT COUNT(*) FROM 'my_preferences' JOIN users ON 'user_id' = 'mp_user_id' )  =1
   UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id'

Else        
   INSERT INTO `my_preferences` (`mp_user_id`, `mp_start_page`) VALUES ('user_id', 'TRUE')

我也尝试使用INSERT ... ON DUPLICATE KEY UPDATE函数来实现这一点,但我似乎无法使其工作。

谢谢你的帮助。

编辑添加:我正在比较两个单独的表(my_preferences和用户)。我需要检查my_preferences表以查看mp_user_id字段中是否存在users.user_id,如果是,则将mp_state_page更新为TRUE,否则,它会添加一条记录,使mp_user_id = user_id和mp_start_page为TRUE

3 个答案:

答案 0 :(得分:1)

INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', 'TRUE') ON DUPLICATE KEY UPDATE mp_start_page = 'TRUE';

应该有效。也许mp_start_page是一个布尔字段,在这种情况下不要引用它。正如下面提到的@galador,请确保将mp_user_id设置为某种键,无论是主键还是外键键。否则ON DUPLICATE KEY没有意义。

答案 1 :(得分:0)

语法错误

UPDATE `mp_start_page`= TRUE where 'user_id' = 'mp_user_id' <-- wrong syntax
UPDATE TABLE_NAME SET `mp_start_page`= TRUE where 'user_id' = 'mp_user_id';

但是mysql不接受

if {condition} 
then {update}
else insert

所以

insert ignore ... <-- if the user_id is primary key

其他严重问题

UPDATE `mp_start_page`= TRUE <--- this is 1
VALUES ('user_id', 'TRUE')   <--- this is string "TRUE"

两者都没有做同样的事情

答案 2 :(得分:0)

  

我也考虑过使用INSERT ... ON来实现这一目标   DUPLICATE KEY UPDATE功能,但我似乎无法让它工作   任

INSERT INTO my_preferences (mp_user_id, mp_start_page) VALUES ('user_id', TRUE)
ON DUPLICATE KEY UPDATE mp_start_page=VALUES(mp_start_page)

如果您在mp_user_id上设置了唯一键,则应该有效。