这有效:
insert into answers
(survey,user,answer)
values(1,'hi',1)
;
这有效:
select * from answers where survey=1 and user='hi';
这不起作用:
insert
into answers
(survey,user,answer)
values(1,'hi',1)
where not exists (select * from answers where survey=1 and user='hi')
;
它在“where not exists”子句的右边给出了一个错误1064。我已查找了所有可以找到的文档,但我发现它没有任何问题。
思想?
答案 0 :(得分:1)
您可以使用insert . . . select
执行此操作,但不能执行insert . . . values
:
insert into answers(survey, user, answer)
select survey, user, answer
from (select 1 as survey, 'hi' as user, 1 as answer) s
where not exists (select 1 from answers a where a.survey= s.survey and a.user = s.user);
那就是说,我建议你让answer(survey, user)
使用唯一键或主键,这样数据库就会强制执行唯一性约束。
答案 1 :(得分:1)
MySQL中INSERT
语句的语法(https://dev.mysql.com/doc/refman/5.6/en/insert.html)没有“where not exists”。
您可能想要的是INSERT IGNORE INTO answers (survey,user,answer) values(1,'hi',1)
。这会插入值,除非它与表上的主键或唯一键冲突,在这种情况下,值将被忽略。
答案 2 :(得分:1)
实际上,INSERT INTO ... VALUES ...
表示法不支持WHERE
子句。相反,您需要使用INSERT INTO ... SELECT ...
表示法,您可以在其中指定实际查询以生成要插入的行。当然,该查询可以包含WHERE
子句:
insert
into answers
(survey,user,answer)
select 1,'hi',1
from (select 1)
where not exists (select * from answers where survey=1 and user='hi')
;