用于从其他表更新表的sql,每个表都有条件,不起作用

Posted

技术标签:

【中文标题】用于从其他表更新表的sql,每个表都有条件,不起作用【英文标题】:sql for update table from other table with each table have condition, not working 【发布时间】:2019-04-16 05:46:30 【问题描述】:

首先,我对 DB2 SQL 不是很精通。

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

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

可以在这里看到表A:enter image description here 可以在这里看到表 B:enter link description here

我尝试使用以下 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;

我对这个查询感到疯狂。 感谢您的所有帮助。

【问题讨论】:

如果 TABLEA 和 TABLEB 在不同的数据库中,您可以更新或插入。只选择在 DB2 上远程工作。 请创建一个可重现的示例,包括两个表的以下语句:表定义 (CREATE TABLE)、INSERT INTO 语句,其中某个特定 ID 有 2-3 行。 您好 Nifriz,感谢您之前的回复。 TABLEA 和 TABLEB 在同一个数据库中。我想更新 TABLEA 以记录从 TABLEB 中获取。但是关于三个我的 sql 不起作用。 您是否收到 SQLSTATE/SQLCODE 错误? 【参考方案1】:

您的日期似乎没有正确转换。优化器可能会将您的 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 <>  '' ;

【讨论】:

以上是关于用于从其他表更新表的sql,每个表都有条件,不起作用的主要内容,如果未能解决你的问题,请参考以下文章

用于 4 个表的 SQL Server 2008 连接类型

EXCEL问题,怎么样设制每个工作表都有同一样标题呢?

在具有四个表的Oracle数据库中创建视图,每个表都有主键

sql将数据从其他表附加到当前表的条件

关于sqlserver临时表的问题,请教高手!

跨表的 SQL VALUES 和 MAX