暂无图片
GBase 8a执行update SQL报错无法更新多行数据 can not update one row to multi-data
我来答
分享
暂无图片 匿名用户
GBase 8a执行update SQL报错无法更新多行数据 can not update one row to multi-data

报错样例


  1. gbase> create table t1(id int, value int);


  2. Query OK, 0 rows affected (Elapsed: 00:00:00.18)



  3. gbase> insert into t1 values(1,'0');


  4. Query OK, 1 row affected (Elapsed: 00:00:00.07)



  5. gbase> create table t2(id int, value int);


  6. Query OK, 0 rows affected (Elapsed: 00:00:00.10)



  7. gbase> insert into t2 values(1,123);


  8. Query OK, 1 row affected (Elapsed: 00:00:00.07)



  9. gbase> insert into t2 values(1,234);


  10. Query OK, 1 row affected (Elapsed: 00:00:00.07)



  11. gbase> select * from t1;


  12. +------+-------+


  13. | id | value |


  14. +------+-------+


  15. | 1 | 0 |


  16. +------+-------+


  17. 1 row in set (Elapsed: 00:00:00.00)



  18. gbase> select * from t2;


  19. +------+-------+


  20. | id | value |


  21. +------+-------+


  22. | 1 | 123 |


  23. | 1 | 234 |


  24. +------+-------+


  25. 2 rows in set (Elapsed: 00:00:00.01)



  26. gbase> update t1 set value=(select value from t2 where t2.id=t1.id);


  27. ERROR 1709 (HY000): [10.0.2.107:5050](GBA-02AD-0005)Failed to query in gnode:


  28. DETAIL: (GBA-01EX-0002) Subquery return more than 1 row


  29. SQL: /*::ffff:10.0.2.107_118_18_2020-09-03_20:47:02*/ UPDATE `testdb`.`t1_n1` `testdb.t1` SET `testdb.t1`.`value` = ( SELECT `testdb.t2`.`value` as `value` From `gctmpdb`.`_tmp_1795293194_118_t51_1_1599096136_s` `testdb.t2` WHERE (`testdb.t2`.`id` = `testdb.t1`.`id`));


  30. gbase> update t1,t2 set t1.value=t2.value where t1.id=t2.id;


  31. ERROR 1709 (HY000): [10.0.2.107:5050](GBA-02AD-0005)Failed to query in gnode:


  32. DETAIL: (GBA-01EX-700) Gbase general error: can not update one row to multi-data


  33. SQL: /*::ffff:10.0.2.107_118_19_2020-09-03_20:47:28*/ UPDATE `gctmpdb`._tmp_1795293194_118_t52_1_1599096136_s INNER JOIN `testdb`.`t1_n1` `testdb.t1` ON (`testdb.t1`.`id` = `_tmp_1795293194_118_t52_1_1599096136_s`.`id`) SET `testdb.t1`.`value` = `_tmp_1795293194_118_t52_1_1599096136_s`.`testdb.t1.value`;


  34. gbase>


  35. ```bash





复制

```

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
生命之源

首先从业务上要避免这种1:n更新的情况。

如果实在避免不了,对于子查询,可以用limit限定结果集。比如

  1. gbase> update t1 set value=(select value from t2 where t2.id=t1.id limit 1);

  2. Query OK, 1 row affected (Elapsed: 00:00:00.28)

  3. Rows matched: 1 Changed: 1 Warnings:

  4. gbase> select * from t1;

  5. +------+-------+

  6. | id | value |

  7. +------+-------+

  8. | 1 | 234 |

  9. +------+-------+

  10. 1 row in set (Elapsed: 00:00:00.00)




复制

对于多表关联更新,无解。请调整业务或改写SQL。

暂无图片 评论
暂无图片 有用 1
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
我想在一个小程序或应用程序中使用 GBase JDBC,但是得到一个类似如下 的异常:
回答 1
或许是因为用户正在运行Applet,用户的GBaseserver安装时设置了“skipnetworking”选项,或者是由于GBaseserver运行在防火墙之后。Applet仅能使网络连接返回运行W
gbase UP全文索引blob uri功能怎么配置
回答 1
gbaseup的全文索引bloburi功能。对于up平台,用户将大文本数据存入up平台,对于大于16m的文本存入hdfs,小于16m的存入hbase,并将存储的bloburi信息存入8a。gbase8
请问GBase 8a中的多实例部署是什么意思?实际工作中应该怎么使用?
回答 1
在一个物理服务器上部署多个data计算节点,每个计算节点称为一个数据库实例。在一个物理机上安装多个计算节点,每个计算节点对应服务器的一个NUMA节点,通过NUMA节点绑定实现CPU、内存等资源隔离和充
GBase8s长事务怎么避免
回答 1
当一个大的事务执行操作,使用LOGICALLOG达到高水位线的时候,这个事务必须回滚,如果达到排他高水位时,这个数据库hung死。建议执行大事务时一定要拆分,并且设置合理的logicallog大小。对
GBase 8s,DBCENTURY 的各种设置如何使缩写年份以 DATE 和 DATETIME 值的形式展开?
回答 1
可以使用DBCENTURY参数来控制年份的展开方式,以使缩写年份以DATE和DATETIME值的形式展开
GBase 8a 数据库的system.log和express.log里,报Read-only file system?
回答 1
已采纳
这种情况多数是外挂存储环境,其存储或网络出问题导致无法写入。需要排查存储和网络。
GBase8s修改gbasedbt用户密码多久生效?
回答 1
一般管理员不需要加密码的呀。参考一下:https://blog.csdn.net/huixinhuiyismile/article/details/126055270
GBASE 8s SSC和Oracle RAC 这两个产品高可用架构有什么不同?
回答 1
谢邀〜•OracleRAC与GBase8sSSC的相同点:1、都是基于共享存储高可用集群2、都具有扩展性,可以在一定范围内随业务需要而扩展3、节点间关系对等,有节点失败后,集群中其它节点会接管失败节点
如何控制GBase 8a MPP Cluster 集群的数据同步并行度?
回答 1
GBase8aMPPCluster集群的fevent同步由gcrecover组件调度和控制。可按照下面方式调整gcrecover组件的配置参数,实现同步并行度的控制。gcrecover.conf配置r
创建GBase 8c哈希分片表后,怎么判断是不是呢?
回答 1
在插入数据后,通过SELECTcount()FROMtablename;查看表数据总行数;然后在各cn节点使用SELECTxcnodeid,count()FROMtablenameGROUPBYxcn
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~