[英]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`,
},
},
});
其中立方體B
和C
也被定義,包括此處使用的尺寸。
但是,制定以下查詢:
dimensions: [`A.state`];
拋出錯誤:
Error: ER_BAD_FIELD_ERROR: Unknown column 'b.state' in 'on clause'
我很可能會錯過明顯的,並會感謝任何指示...
原來下面B
到C
加入:
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.