【问题标题】:Clickhouse subquery use attributes from main queryClickhouse 子查询使用来自主查询的属性
【发布时间】:2021-07-14 11:48:57
【问题描述】:

我需要使用来自主查询的参数执行子查询。但是当我可以尝试执行时:

SELECT
    (
      SELECT time 
      FROM changes ch2
      WHERE ch2.trackable_id = ch.trackable_id AND ch.action = 'create'
      LIMIT 1
    )
FROM changes ch

LIMIT 1000

我收到一个错误

Error running query: Code: 47, e.displayText() = DB::Exception:
Missing columns: 'ch.trackable_id' while processing query:
'SELECT time 
      FROM changes ch2
      WHERE ch2.trackable_id = ch.trackable_id AND ch.action = 'create'
      LIMIT 1',

required columns: 'time' 'ch.trackable_id' 'trackable_id' 'action',
maybe you meant: ['time','trackable_id','trackable_id','action']:

While processing

(SELECT time 
  FROM changes ch2
  WHERE ch2.trackable_id = ch.trackable_id AND ch.action = 'create'
  LIMIT 1) AS _subquery1 (version 21.3.14.1 (official build))

任何想法,请。在 PostgreSQL 上它工作正常。

我对这个数据库的经验很少。也许我需要使用不同的方法来构建我的查询。

【问题讨论】:

  • 你想完成什么?我假设子查询应该是ch2.action = 'create',而不是ch.action = 'create'。
  • CH 不支持相关子查询。使用 join 或 union all + group by

标签: sql clickhouse


【解决方案1】:

也许join 和聚合会起作用?

SELECT ch.*, ch2.*
FROM changes ch LEFT JOIN
     (SELECT ch2.trackable_id, MAX(time) as create_time
      FROM changes ch2
      WHERE ch2.action = 'create'
      GROUP BY ch2.trackable_id
     ) ch2
     ON ch2.trackable_id = ch.trackable_id;

【讨论】:

    猜你喜欢
    • 2014-11-23
    • 1970-01-01
    • 2014-03-29
    • 2021-03-20
    • 2020-05-04
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多