一部のユーザーから作成されたSQLを実行し、その結果を表示する必要があります。SQLの例は次のとおりです。
SELECT t1.*, t2.* FROM table1 t1, table2 t2, where table1.id = table2.id
このSQLはそのままで正常に動作しますが、手動でページ付けを追加して行番号を表示する必要があるため、SQLは次のようになります。
SELECT z.*
FROM(
SELECT y.*, ROWNUM rn
FROM (
SELECT t1.*, t2.* FROM table1 t1, table2 t2, where table1.id = table2.id
) y
WHERE ROWNUM <= 50) z
WHERE rn > 0
これにより、「ORA-00918:列があいまいに定義されました」という例外がスローされます。これは、Table1とTable2の両方に同じ名前( "id")のフィールドが含まれているためです。
これを回避するための最良の方法は何でしょうか?
よろしく。
- アップデート
結局、私たちは醜い方法で、実行する前に来る各SQLを解析する必要がありました。基本的に、アスタリスクを解決して、追加する必要のあるフィールドを見つけ、すべてのフィールドを一意のIDでエイリアスします。これによりパフォーマンスが低下しましたが、クライアントはそれが要件を考慮した唯一のオプションであることを理解していました。
私たちが取り組んだ解決策であるため、Lexの回答にマークを付けます。