如何在另一张表存在指定值的条件下执行INSERT表插入操作
问题分析
你原本的写法存在语法错误,INSERT ... SET 语法不支持直接拼接WHERE子句,只有UPDATE、DELETE或者SELECT语句支持直接加WHERE做条件过滤,所以原语句无法执行。
正确实现方案
改用INSERT ... SELECT的语法结构,将你要插入的固定值作为SELECT的返回内容,再附加EXISTS条件做判断即可,MySQL环境下可以直接用下面的写法:
INSERT INTO examqst (qno, qst, qan1, qan2, qan3, qan4, qant, qtype, examid) SELECT 1, 'aa', 'a', 'B', 'C', 'd', 'A', 0, 1 WHERE EXISTS (SELECT * FROM examname WHERE examid = 1 AND s_id = 10);
如果是Oracle等强制要求SELECT必须带FROM子句的数据库,可以加上虚表DUAL兼容:
INSERT INTO examqst (qno, qst, qan1, qan2, qan3, qan4, qant, qtype, examid) SELECT 1, 'aa', 'a', 'B', 'C', 'd', 'A', 0, 1 FROM DUAL WHERE EXISTS (SELECT * FROM examname WHERE examid = 1 AND s_id = 10);
逻辑说明
只有当EXISTS后的子查询返回结果(也就是examname表中存在符合examid=1且s_id=10的记录)时,前面的SELECT才会返回你要插入的那行数据,INSERT才会执行;如果子查询无结果,SELECT返回空集,就不会有任何数据插入到examqst表,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者AMAL BENNY
相关产品推荐
相关产品推荐

