1

DB2 データベースを使用しています。

次のようなクエリがあります。

DELETE FROM MYSCHEMA.MY_TABLE WHERE (PROD LIKE 'AB%' OR PROD LIKE 'CD%' OR PROD LIKE 'EF%');

上記のクエリはプロパティ ファイルに存在し、Java プログラムを使用して実行しています。

ただし、今は where 条件を外部化したいと考えています。

次のようなエントリを持つ単一の列 PROD_NAME を持つ新しいテーブル PROD_LIKE を作成しました。

PROD_NAME
------------
AB
CD
EF
------------

上記の新しく作成されたテーブルに存在するエントリを使用するように、削除クエリの where 条件を変更したいと考えています。

どうすれば達成できますか?

DB2 のドキュメントには次のように書かれています。

問題の解決 SQL Server や Oracle などの他のデータベースでは、「類似」比較で両方のオペランドにデータベース列を使用できますが、DB2 はより制限的です。クエリデータベースがDB2の場合、上記のような計算または選択を避ける必要があります。DB2 を照会し、比較で「like」を使用する場合、データベース列を 2 番目のオペランドとして使用する方法はありません。

これに代わるものは何ですか?

4

1 に答える 1

0

TSQLでは、おそらくこれを行うでしょう。

DELETE 
   T
FROM 
    MYSCHEMA.MY_TABLE T 
    INNER JOIN PROD_NAME P
      ON LEFT(T.PROD,2) = P.PROD_NAME

これはほぼ ANSI SQL であると確信しているため、DB2 SQL も同様であると確信しています。

ハードコーディングされた2を取り除くために、より一般的な方法を試すこともできます

DELETE 
   T
FROM 
    MYSCHEMA.MY_TABLE T 
    INNER JOIN PROD_NAME P
      ON LEFT(T.PROD, LEN(P.PROD_NAM)) = P.PROD_NAME

なぜ必要なのかわかりませんが、必要に応じてlikeできます。

DELETE 
   T
FROM 
    MYSCHEMA.MY_TABLE T 
    INNER JOIN PROD_NAME P
      ON T.PROD LIKE P.PROD_NAME + '%'
于 2013-02-05T05:37:33.520 に答える