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

标签 mysql cube.js

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

SELECT * FROM a
LEFT JOIN b ON a.name = b.name
LEFT JOIN c ON b.state = c.state;

我的问题是:如何在 cube.js 中实现此目的?

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

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,包括此处使用的维度。

但是,制定以下查询:

dimensions: [`A.state`];

抛出错误:

Error: ER_BAD_FIELD_ERROR: Unknown column 'b.state' in 'on clause'

我很可能会错过显而易见的事情,并且将不胜感激任何指点......

最佳答案

事实证明,以下BC加入:

  joins: {

    //...

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

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

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

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

关于mysql - 如何在Cube.js中实现间接连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61511561/

相关文章:

node.js - Cube.js 服务器正在监听 4000,但无法获取 UI

mysql - 将 Heroku 应用程序与 Amazon RDS 实例连接时出现问题

mysql - 您将如何在 Rails 应用程序的数据库/模型中存储营业时间?

php - 在php中根据条件从数据库生成随机数据

MySQL 将行合并为列

mysql - 从 MySQL 中的数字列表中选择一列

redis - 如何使用cube.js连接特定的redis

mongodb - 多维数据集如何连接从 MongoDB 数组创建的两个表?