sql for update table from another table with each table has condition,not working

问题描述 投票:0回答:1

首先,我不是非常精通DB2 SQL。

我有一个表和表B.一个表包含最后的修改数据,而表B包含表TABLE A中的数据历史/跟踪记录。

我想更新用TABLEB.LAST_PRICE填充的列TABLEA.LAST_PRICE(条件DEAL_DATE ='1753-01-01'和CODE <>'')(条件DEAL_DATE <>'1753-01-01'和CODE <> ''并按CHANGE_DATE desc limit 1排序)其中两个表的外键是TABLEA.ID = TABLEB.ID

我尝试使用以下3个SQL更新TABLEA,但从未成功:

 1. update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where b.DEAL_DATE <> '1753-01-01' and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY)
    where a.DEAL_DATE = '1753-01-01' and a.CODE <>  '' ;




2.  update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where b.DEAL_DATE <> '1753-01-01' and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc limit 1) where a.DEAL_DATE = '1753-01-01' and a.CODE <>  '' ;




3. update DB.TABLEA set a.LAST_PRICE = b.LAST_PRICE from DB.TABLEA  a
    join DB.TABLEB  b on a.ID = b.ID where a.DEAL_DATE = '1753-01-01'
    and a.CODE <> '' and b.DEAL_DATE <> '1753-01-01' and b.CODE <> ''
    order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY;

我对此查询感到疯狂。感谢您的帮助。

sql db2 sql-update db2-400
1个回答
0
投票

您的日期似乎没有正确转换。优化器可能会将TABLEB DEAL_DATE转换为时间戳,然后转换为与纯字符串不匹配的字符。在对日期进行比较时,通常最好将它们作为实际日期进行比较,而不仅仅是它们的表示。

update DB.TABLEA as a set a.LAST_PRICE = (select LAST_PRICE from
    DB.TABLEB as b where cast(b.DEAL_DATE as date) <> cast('1753-01-01' as date) and a.ID = b.ID and
    b.CODE <> '' order by b.CHANGE_DATE desc FETCH FIRST 1 ROWS ONLY)
    where cast(a.DEAL_DATE as date) = cast('1753-01-01' as date) and a.CODE <>  '' ;
© www.soinside.com 2019 - 2024. All rights reserved.