我可能误解了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'我很可能会错过显而易见的事情,如果你能给我指点的话.
发布于 2020-05-01 23:02:35
事实证明,以下B到C连接:
joins: {
//...
C: {
sql: `${B}.state = ${C}.state`,
relationship: `belongsTo`,
},
},需要发生在多维数据集B中,而不是多维数据集A中。其原因似乎是多维数据集引用其他多维数据集,而不是在幕后构建持久表。
这也解释了为什么来自连接表的维度仍然需要指向表示连接表的多维数据集,例如上面问题的代码中的state维度:
state: {
sql: `${C}.state`,
type: `string`,
},https://stackoverflow.com/questions/61511561
复制相似问题