我在mysql中有一个生产数据库,并在H2中做了一些Junit测试。
我正在努力寻找一种语法,既可以在测试中工作,也可以在生产中删除2个表中的记录。
SQL查询使用以下命令发送到数据库
jdbctemplate.update(sqlQuery, queryArgs);
字符串
到目前为止,我已经找到了在mysql上工作但在H2上不工作的查询,反之亦然。
我有两张table:请求和响应,在公共datetime和milisec中有2列。couple(datetime,milisec)是请求的主键,同一对可以有多个响应。
我想删除与某些请求匹配的响应。
这个请求在我的SQL中工作得很好,但在H2中不行:
DELETE r.*
FROM responses AS r NATURAL JOIN Call_requests AS s
WHERE -- criteria on call_requests table
型
我最接近的说法是
DELETE FROM responses
where (datetime, milisec) in
(select datetime, milisec from requests where -- criteria)
型
上面的版本适用于mysql,而不是h2,下面的tuple周围的括号是相反的(适用于h2,而不是mysql)
DELETE FROM responses
where (datetime, milisec) in
(select (datetime, milisec) from requests where -- criteria)
型
1条答案
按热度按时间xdnvmnnf1#
您可能需要使用稍微不同的方法,因为H2和MySQL处理元组比较的方式略有不同。
与尝试使用元组比较(即比较来自requests的
(datetime, milisec)
和来自responses的(datetime, milisec)
),您可以分别对datetime
和milisec
进行比较。要从两个表中删除匹配的记录,requests和responses,对MySQL和H2数据库使用相同的SQL代码,这应该工作:
字符串
如果
requests
中至少有一个条目具有相同的datetime
和milisec
,我们将从responses
中删除条目。