我正在尝试更新表格,但是我得到了这个例外:
#1064 - 您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 接近' IF存在(SELECT * FROM
indicadores_val
WHEREindv_val
='' 和ind_id
='在第1行
我正在使用的查询是
IF exists
(SELECT *
FROM `indicadores_val`
WHERE `indv_val` = '' AND `ind_id` = 11)
THEN
UPDATE indicadores_val
SET ind_valr11 = '34',ind_valr12 = '54'
WHERE `indv_val` = '' AND `ind_id` =11
ELSE
INSERT INTO `indicadores_val` (ind_id,ind_valr11,ind_valr12)
VALUES (11,60,60)
这是我的架构
CREATE TABLE IF NOT EXISTS `indicadores_val` (
`indv_id` int(11) NOT NULL AUTO_INCREMENT,
`ind_id` int(11) NOT NULL,
`indv_val` text NOT NULL,
`ind_fun` int(11) NOT NULL,
`ind_valr11` text NOT NULL,
`ind_valr12` text NOT NULL,
`ind_valr21` text NOT NULL,
`ind_valr22` text NOT NULL,
PRIMARY KEY (`indv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=41 ;
答案 0 :(得分:1)
您需要在查询结尾处使用END IF 请参阅IF语法http://dev.mysql.com/doc/refman/5.0/en/if.html
的文档答案 1 :(得分:1)
最可能的原因是此代码不在存储过程或函数中。阅读if
声明here。
我怀疑你想要这样的东西:
INSERT INTO `indicadores_val`(ind_id, ind_valr11, ind_valr12)
values ( 11, 60, 60 )
on duplicate key update ind_valr11 = 34, ind_valr12 = 54;
我不确定如何应用invv_val
上的条件。您是否真的希望该字段中存在值以防止更新?
答案 2 :(得分:1)
如果您没有使用唯一约束,那么您需要在脚本中实现条件逻辑。您可以使用您选择的脚本语言执行此操作,也可以使用MySQL存储过程。
存储过程看起来像这样:
delimiter $$
drop procedure if exists sp_inicadores_val_upsert $$
create procedure sp_inicadores_val_upsert (p_ind_id int,p_ind_valr11 int,p_ind_valr12 int)
begin
declare v_row_exists tinyint default 0;
select count(*)
into v_row_exists
from
(
select null
from `indicadores_val`
where `indv_val` = ''
and `ind_id` = p_ind_id
limit 1
) sub_query;
if v_row_exists
then
THEN
UPDATE indicadores_val
SET ind_valr11 = p_ind_valr11,
ind_valr12 = p_ind_valr12
WHERE `indv_val` = ''
AND `ind_id` = p_ind_id;
else
INSERT INTO `indicadores_val` (ind_id,ind_valr11,ind_valr12)
VALUES (p_ind_id,p_ind_valr11,p_ind_valr12);
end if;
end $$
delimiter ;
答案 3 :(得分:0)
请尝试
INSERT INTO `indicadores_val` (ind_id,ind_valr11,ind_valr12)
VALUES (11,60,60)
ON DUPLICATE KEY UPDATE ind_id = VALUES(ind_id), ind_valr11 = VALUES(ind_valr11), ind_valr12 = VALUES(ind_valr11)