私は現在H2データベースで作業していますが、H2データベースエンジンは複数列のサブクエリで実行されるNOT IN
をサポートしていません。は明確にするために、サブクエリは、具体的見つけようとしている:それは代替SQLが必要
編集サブクエリとしてfamid
とparamid
の同じ組み合わせを持ってどこ
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
から行を削除したいですallowedparam_map
を除外するために、macrodata
には存在しないfamid/paramid
の組み合わせがあり、したがって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 |
パラメータがあたり、家族ごとに許可されています。はここで適切なスキーマについていくつかの詳細情報です。 allowedParam_map
テーブルにfamid=1
とparamid=4
のエントリが含まれていることに注意してください。マクロ0(別名「foo」)にはparamid=4
のエントリがありません。これを展開すると、別のfamid=1
マクロにparamid=4
が含まれている可能性がありますが、わかりません。 macrodata
テーブルのデータに基づいて、未使用のパラメータをallowedParam_map
テーブルから取り除きたいとします。
'famid'と' paramid'はどのテーブルにありますか? –
@ThorstenKettner 'famid'と' paramid'は 'macros'テーブルにあります – bss36504
あなたの編集に関して:"マクロデータに存在しないfamid/paramidの組み合わせ "?列がマクロテーブルに存在する場合、それらがマクロデータテーブルにどのように存在するか、存在しないか?テーブルに実際に含まれる列を表示することができます。いくつかのサンプルデータと期待される結果を与えることさえあれば、大きな助けになります。 –