首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Cube.js中实现间接连接?

如何在Cube.js中实现间接连接?
EN

Stack Overflow用户
提问于 2020-04-29 20:58:42
回答 1查看 303关注 0票数 2

我可能误解了cube.js联接,但在SQL中,我可以从一个由如下所示的表删除的表中进行连接:

代码语言:javascript
复制
SELECT * FROM a
LEFT JOIN b ON a.name = b.name
LEFT JOIN c ON b.state = c.state;

我的问题是:如何在cube.js中实现这一点?

我尝试使用以下模式(以及上面的一些变体)重新创建上面的内容:

代码语言:javascript
复制
cube(`A`, {
  sql: `SELECT * FROM a`,

  joins: {
    B: {
      sql: `${A}.name = ${B}.name`,
      relationship: `belongsTo`,
    },
    C: {
      sql: `${B}.state = ${C}.state`,
      relationship: `belongsTo`,
    },
  },

  dimensions: {
    id: {
      sql: `id`,
      type: `number`,
      primaryKey: true,
    },

    name: {
      sql: `${B}.name`,
      type: `string`,
    },

    state: {
      sql: `${C}.state`,
      type: `string`,
    },
  },
});

其中还定义了多维数据集、BC,包括这里使用的维度。

但是,提出以下查询:

代码语言:javascript
复制
dimensions: [`A.state`];

抛出错误:

代码语言:javascript
复制
Error: ER_BAD_FIELD_ERROR: Unknown column 'b.state' in 'on clause'

我很可能会错过显而易见的事情,如果你能给我指点的话.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-01 23:02:35

事实证明,以下BC连接:

代码语言:javascript
复制
  joins: {

    //...

    C: {
      sql: `${B}.state = ${C}.state`,
      relationship: `belongsTo`,
    },
  },

需要发生在多维数据集B中,而不是多维数据集A中。其原因似乎是多维数据集引用其他多维数据集,而不是在幕后构建持久表。

这也解释了为什么来自连接表的维度仍然需要指向表示连接表的多维数据集,例如上面问题的代码中的state维度:

代码语言:javascript
复制
state: {
  sql: `${C}.state`,
  type: `string`,
},
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61511561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档