我正在使用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”时,无法使用数据库列作为第二个操作数。
有什么可以替代呢?
答案 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 + '%'