これが私の問題です。
53列を含むOracleテーブルがあります。そして、すべての列の値を検索したいと思います。そして、私はすべての列をwhere条件に入れたくありません。
これを達成するための楽観的な方法はありますか?
任意の助けいただければ幸いです。
私が知る限り、クエリで何らかの方法で検索するすべての列名を参照しないと、テーブルのすべての列で値を検索することはできません。
すべての列に互換性のあるデータ型があり、値に一致する列が少なくとも1つある行を返したい場合は、ここでこれを実現する1つの方法です。
SELECT *
FROM tablename
WHERE 'value' IN (col1, col2, ... col53);
すべての列名を書き出す作業をやりたくない場合、または多くの異なるテーブルに対してこれらのタイプのクエリを生成する必要がある場合は、Oracleのメタデータビューを使用してクエリの書き込みを自動化できます。たとえば、 ALL_TAB_COLUMNS ビューをクエリすることで、テーブルのすべての列名のリストを生成できます。このようなものはうまくいくはずです:
SELECT LISTAGG(COLUMN_NAME, ', ') WITHIN GROUP (ORDER BY COLUMN_ID)
from ALL_TAB_COLUMNS
WHERE OWNER = 'TABLE_OWNER' -- replace with the owner
AND TABLE_NAME = 'tablename'; -- replace with the table name