我目前正在使用H2数据库,并且已经编写了以下SQL,但H2数据库引擎不支持在多列子查询上执行的NOT IN
。需要备用SQL
DELETE FROM AllowedParam_map
WHERE (AllowedParam_map.famid,AllowedParam_map.paramid) NOT IN (
SELECT famid,paramid
FROM macros
LEFT JOIN macrodata
ON macros.id != macrodata.macroid
ORDER BY famid)
基本上我想从allowedparam_map
删除行无论它有famid
和paramid
作为子查询相同的组合
编辑:为了澄清,子查询是专门试图找到famid/paramid
macrodata
中不存在的组合,试图清除allowedparam_map
,因此ON macros.id != macrodata.macroid
。我在SQL中也很糟糕,所以这可能完全是错误的做法。
编辑2:这里是关于的相关模式的一些详细信息:
Macros
| ID | NAME | FAMID |
| 0 | foo | 1 |
| 1 | bar | 1 |
| 2 | baz | 1 |
MacroData
| ID | MACROID | PARAMID | VALUE |
| 0 | 0 | 1 | 1024 |
| 1 | 0 | 2 | 200 |
| 2 | 0 | 3 | 89.85 |
AllowedParam_Map
| ID | FAMID | PARAMID |
| 0 | 1 | 1 |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
参数允许在每个家庭的基础。请注意0表如何包含famid=1
和paramid=4
的条目,即使宏0(又名“foo”)没有paramid=4
的条目。如果我们扩展这个,可能会有另一个famid=1
宏,它有paramid=4
,但我们无法确定。我想根据macrodata
表中的数据从allowedParam_map
表中挑选任何未使用的参数。
“famid”和“paramid”在哪些表中? –
@ThorstenKettner'famid'和'paramid'驻留在'macros'表 – bss36504
至于编辑:“macrodata中不存在的famid/paramid组合”?如果这些列驻留在宏表中,它们如何存在或不存在于宏数据表中?您可能想要显示您的表实际包含的列。如果你甚至提供了一些样本数据和预期结果,那将是一个很大的帮助。 –