簡體   English   中英

如何在 Cube.js 中實現間接連接?

[英]How to achieve an indirect join in 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`,
},

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM