用于从其他表更新表的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,每个表都有条件,不起作用的主要内容,如果未能解决你的问题,请参考以下文章