外部化sql查询中的条件

时间:2013-02-05 05:31:32

标签: sql db2

我正在使用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 where条件,以便它使用上面新创建的表中的条目。

我怎样才能实现它?

DB2文档说:

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

有什么可以替代呢?

1 个答案:

答案 0 :(得分: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 + '%'