簡體   English   中英

使用 Cube.js 進行外部連接

[英]Outer join using Cube.js

我正在使用 Cube.js 從 Postgres 中獲取數據。 默認情況下,cube.js 對 2 個選定的表進行左連接。 有什么方法可以通過完全外連接獲得結果?

用戶登記表
身份證時間
1 10.00
3 9.00

最后一個活動表
身份證時間
1 11.00
2 10.00

所以我想要的 output 是
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9.00

Cube.js 僅使用LEFT JOIN來表達立方體之間的關系,以鼓勵正確的 Cube.js 架構設計: https://cube.dev/docs/joins 您的案例可以表示為以下 Cube.js 架構:

cube(`Users`, {
  sql: `
  SELECT DISTINCT id FROM users_register 
  UNION 
  SELECT DISTINCT id FROM last_active`,

  joins: {
    UsersRegister: {
      sql: `${Users}.id = ${UsersRegister}.id`,
      relationship: `hasMany`
    },
    UsersLastActive: {
      sql: `${Users}.id = ${UsersLastActive}.id`,
      relationship: `hasMany`
    }
  },

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

cube(`UsersRegister`, {
  sql: `select * from users_register`,

  measures: {
    registerTime: {
      sql: `time`,
      type: `min`
    }
  },

  dimensions: {
    id: {
      sql: `id`, // if id is unique within users_register
      type: `number`,
      primaryKey: true
    }
  }
});

cube(`UsersLastActive`, {
  sql: `select * from last_active`,

  measures: {
    lastActiveTime: {
      sql: `time`,
      type: `max`
    }
  },

  dimensions: {
    id: {
      sql: `id`, // if id is unique within last_active
      type: `number`,
      primaryKey: true
    }
  }
});

查詢以獲得所需的結果:

{
  measures: ['UsersLastActive.lastActiveTime', 'UsersRegister.registerTime'],
  dimensions: ['Users.id']
}

暫無
暫無

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

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