sybaseスクリプトをOracle11gスクリプトに変換するのに苦労しています。翻訳ツールを使用しましたが、Rowidとさらに混乱しました。rowidを使用せずにそれを行う簡単な方法はありますか?それで、Oracleを学んだばかりの私にとって、消化しやすくなりますか?
これが私のSybaseスクリプトです。
delete table_1
from table_1 a, table_2 b
where (select count(*) from table_2
where a.id = id
and a.seq = seq
and a.gcode = gcode
and a.gtype = gtype) = 0
and a.id = b.id
and a.seq = b.seq;
OracleSQL開発翻訳ツールの結果は次のとおりです。
DELETE table_1
WHERE ROWID IN
( SELECT a.ROWID
FROM table_1 a,
table_2 b
WHERE ( SELECT COUNT(*)
FROM table_2
WHERE a.id = id
AND a.seq = seq
AND a.gcode = gcode
AND a.gtype = gtype ) = 0
AND a.id = b.id
AND a.seq = b.seq );
RowIdの代わりにIDを使用して書き込むのは安全ですか?: table_1とtable_2の両方のIDは同じPKを参照します。Table_1とtable_2は相互にミラーリングされています。
DELETE table_1
WHERE ID IN
( SELECT DISTINCT a.ID
FROM table_1 a,
table_2 b
WHERE ( SELECT COUNT(*)
FROM table_2
WHERE a.id = id
AND a.seq = seq
AND a.gcode = gcode
AND a.gtype = gtype ) = 0
AND a.id = b.id
AND a.seq = b.seq );