如何在Apache Ignite中用关联表列更新目标表空值字段?
问题解答
Apache Ignite 8.8.29版本的SQL确实不支持标准数据库中带WHEN MATCHED分支的MERGE语法。你遇到的MERGE插入新记录的问题,是因为该版本MERGE的逻辑是主键匹配则全字段更新,不匹配则插入,但你的需求是仅更新VOTE表中comment为空的记录且只修改comment字段,这种场景下更适合用关联UPDATE语句。
实现方案
直接使用关联UPDATE语句,精准更新目标字段:
UPDATE master.VOTE v SET v.comment = (SELECT vd.comment FROM master.VOTEDETAIL vd WHERE v.voteId = vd.voteId) WHERE v.comment IS NULL AND EXISTS ( SELECT 1 FROM master.VOTEDETAIL vd WHERE v.voteId = vd.voteId AND vd.comment IS NOT NULL )
这条语句的逻辑是:
- 只筛选VOTE表中comment为空的记录
- 仅当对应的VOTEDETAIL记录存在且comment非空时,才用VOTEDETAIL的comment值更新VOTE的comment字段
- 不会修改VOTE表中的其他字段,也不会插入新记录
关于你之前的MERGE语句
你之前的MERGE会将VOTEDETAIL中comment非空的记录,对VOTE表执行“匹配则全字段更新,不匹配则插入”的操作,这显然不符合你仅更新空comment字段的需求,所以不适用该场景。
内容的提问来源于stack exchange,提问作者Prasad
相关产品推荐
相关产品推荐

