请教一条 MYSQL 语句,根据 SELECT 有无数据,进行 INSERT,或者是什么都不做...

2021-03-27 21:34:49 +08:00
 pppguest3962

老旧系统,历史原因,因为提交接口是一个 SQL 命令队列,所以这个实现,只能用 MYSQL 一条语句提交去完成判断,并且根据判断有无结果来进行是否 INSERT

分开写是这样的:

SELECT 判断有无数据

SELECT caseid FROM caseresult WHERE caseid='1897';

如果上面的查询语句查询到 [没有] 数据,则:

INSERT INTO casecheck (flag,section,checktime) VALUES ('2','8',now());

如果上面 SELECT 有数据,则什么都不做...

以上:
能不能一句 MYSQL 搞定?
谢谢解答!

3636 次点击
所在节点    MySQL
30 条回复
xiangyuecn
2021-03-27 21:42:02 +08:00
insert tab(a,b,c) select 1,2,3

insert 并非一定要接一个 values,接一个 select 也是可以的,简单快速
killergun
2021-03-27 21:44:50 +08:00
qazwsxkevin
2021-03-27 21:52:27 +08:00
楼上两位理解不是这样的,也可能我没说清楚,并非是为了防重复
语句是通过 String 操作组装起来的,
语句的根本逻辑是,判断 A 事情是否有,但做的 B 事情,跟 A 事情完全没有关系,并且是两个不同的逻辑。
qazwsxkevin
2021-03-27 21:53:45 +08:00
qazwsxkevin
2021-03-27 21:57:01 +08:00
B 的事情,完全不借助 A 的内容,只是判断 A 在这张表里有没有匹配 WHERE 的数据,有就 INSERT 另外一套组装好的数据,没有就什么都不做
qazwsxkevin
2021-03-27 21:58:12 +08:00
刚才同事忘了 Logout 自己账号,所以用了他的账号发了贴,抱歉
yjxjn
2021-03-27 22:01:55 +08:00
isnull 写一条就完事了
yjxjn
2021-03-27 22:03:21 +08:00
说错了,在 oracle 里面 nvl 或者 nvl2 解决了
Ptu2sha
2021-03-27 22:03:29 +08:00
所以 你是没看过 if 语句?
monsterxx03
2021-03-27 22:10:23 +08:00
caseid 如果是 unique key,可以用 insert ignore
uselessVisitor
2021-03-27 22:20:18 +08:00
case when 不能做吗。。
uselessVisitor
2021-03-27 22:36:11 +08:00
@beichenhpy 不能做。。
uselessVisitor
2021-03-27 22:45:14 +08:00
想到一个办法:
insert into casecheck (flag,section,checktime) select '2','8',now() where not exists(SELECT caseid FROM caseresult WHERE caseid='1897')
pppguest3962
2021-03-27 22:53:11 +08:00
@yjxjn 对 MYSQL 不熟悉才问的,IFNULL 的参数,如果一值为 Empty,二值是不能一句 INSERT INTO 的。。。
@beichenhpy case when 只能本表
uselessVisitor
2021-03-27 22:54:41 +08:00
@pppguest3962 你看一下我最新的一条回复,应该可以,我自己试了一下
xmpx310
2021-03-27 23:27:09 +08:00
replace into ?
mingl0280
2021-03-27 23:42:05 +08:00
往数据库里插存储过程呗,调用就一句了。
l00t
2021-03-28 00:02:12 +08:00
一楼就告诉你答案了……
pppguest3962
2021-03-28 01:02:04 +08:00
@beichenhpy 谢谢,我试着测试一下,我这里测试没通过。。。。

INSERT INTO casecheck `flag` SELECT '2' WHERE NOT EXISTS (SELECT `caseid` FROM caseresult WHERE `caseid`='1897');




1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`flag` SELECT '2' WHERE NOT EXISTS (SELECT `caseid` FROM caseresult WHERE `case' at line 1
时间: 0.001s
dvvj
2021-03-28 01:15:11 +08:00
语法错了? INSERT INTO casecheck (flag) SELECT '2' WHERE NOT EXISTS (SELECT `caseid` FROM caseresult WHERE `caseid`='1897');

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/765767

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX