前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse常见问题之使用另一个表中的值更新行 - Java技术债务

ClickHouse常见问题之使用另一个表中的值更新行 - Java技术债务

作者头像
Java技术债务
发布2024-06-21 16:58:11
860
发布2024-06-21 16:58:11
举报
文章被收录于专栏:Java技术债务Java技术债务

问题描述

有两张表,A表是广告活动名称, B表是广告活动产生的报表数据(包含广告活动名称);想把B表中的名称修改为B表中的名称。 更新语句如下:

代码语言:javascript
复制
ALTER TABLE B
    UPDATE campaign_name =
    (
        SELECT campaign_name FROM B b
        JOIN A a ON b.campaign_id = a.campaign_id
    ) WHERE campaign_id in (ids)

内部查询没问题,但是总是异常。 结果如下:

代码语言:javascript
复制
DB::Exception: Unknown identifier: a.campaign_id , context: required_names: 'a.campaign_id' source_tables: table_aliases: private_aliases: column_aliases: public_columns: masked_columns: array_join_columns: source_columns: .

问题排查

经官网和google查询ClickHouse不支持ALTER TABLE UPDATE的相关联接

问题解决

第一种

数据量不大的情况下,删数据或者删表重新导入新的数据,简单粗暴。

第二种

使用一种变通方法,为更新创建一个特殊的联接引擎表。

代码语言:javascript
复制
CREATE TABLE A_join as states Engine = Join(ANY, LEFT, statefp);

INSERT INTO A_join SELECT * from A;

ALTER TABLE B UPDATE campaign_name = joinGet('A_join', 'campaign_name', statefp))
WHERE campaign_id in (ids);

DROP TABLE A_join;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • 问题排查
  • 问题解决
    • 第一种
      • 第二种
      相关产品与服务
      腾讯云 BI
      腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档