1

我正在使用 DB2 数据库。

我有一个像这样的查询:

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

上面的查询存在于属性文件中,我正在使用 java 程序执行它。

但是,现在我想将 where 条件外部化。

我创建了一个新表 PROD_LIKE,它有一个单列 PROD_NAME,条目如下:

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

我想修改删除查询的 where 条件,以便它使用上面新创建的表中存在的条目。

我怎样才能实现它?

DB2 文档说:

解决问题 尽管 SQL Server 或 Oracle 等其他数据库允许在“相似”比较中对两个操作数使用数据库列,但 DB2 的限制更大。当查询数据库是 DB2 时,必须避免上述计算或选择。在查询 DB2 并在比较中使用“like”时,无法使用数据库列作为第二个操作数。

有什么替代方法呢?

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

我确信 DB2 SQL 是相似的,因为我确信这几乎是 ANSI 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 回答