Jointure externe utilisant Cube.js

J'utilise Cube.js pour récupérer les données de Postgres. Par défaut, cube.js effectue une jointure gauche sur 2 tables sélectionnées. Existe-t-il un moyen d'obtenir le résultat par Full Outer Join?

ID de table de registre d'utilisateur
HEURE
1 10,00
3 9,00

ID de la dernière table active
HEURE
1 11.00
2 10.00

Donc la sortie que je veux est
ID Last_active_time Register_time
1 11.00 10.00
2 10.00 ----
3 ---- 9.00


Solution du problème

Cube.js utilise uniquement LEFT JOINpour exprimer la relation entre les cubes dans le but d'encourager la bonne conception du schéma Cube.js : https://cube.dev/docs/joins. Votre cas peut être exprimé comme le schéma Cube.js suivant :

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
}
}
});

Requête pour obtenir le résultat souhaité :

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

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"