シャノンの解決策は、進むべき道です。演算子NOT IN(またはNOT EXISTS)を使用します。
ただし、Oracleで結合を削除または更新することはできますが、構文はMSSQLServerと同じではありません。
SQL> DELETE FROM (SELECT grp.*
2 FROM grp
3 LEFT JOIN my_data ON grp.id1 = my_data.id1
4 AND grp.id2 = my_data.id2
5 AND grp.id3 = my_data.id3
6 AND grp.id4 = my_data.id4
7 WHERE my_data.id1 IS NULL);
2 rows deleted
さらに、Oracleは、ステートメントによってアクセスされる基本行に関してあいまいさがない場合にのみ、結合を更新できるようにします。特に、行が結合に2回表示される可能性がある場合、Oracleは更新または削除のリスクを負いません(ステートメントは失敗します)。この場合、削除はmy_data(id1, id2, id3, id4).
にUNIQUE制約がある場合にのみ機能します。