Mysql 使用jugglingdb选择另一个表中存在id的结果

Mysql 使用jugglingdb选择另一个表中存在id的结果,mysql,node.js,jugglingdb,Mysql,Node.js,Jugglingdb,我正试图使用jugglingdb(和mysql适配器)获取患者列表。我们的模式设置为患者必须是用户,但用户不一定是患者。这意味着患者有一个用户ID,用户表保存患者的姓名 Patient id userId User id givenName familyName middleInitial 在创建初始页面时,我们只需使用Patient.all来获取结果,并使用Patient.user(…来获取用户对象/用户名。这对于少量记录来说是可以的,但对于数

我正试图使用jugglingdb(和mysql适配器)获取患者列表。我们的模式设置为患者必须是用户,但用户不一定是患者。这意味着患者有一个用户ID,用户表保存患者的姓名

Patient
    id
    userId
User
    id
    givenName
    familyName
    middleInitial
在创建初始页面时,我们只需使用
Patient.all
来获取结果,并使用
Patient.user(…
来获取用户对象/用户名。这对于少量记录来说是可以的,但对于数千条记录来说则不行

只有在患者表中引用了用户id时,如何获取用户列表?mysql查询示例:

SELECT * FROM User WHERE id IN (SELECT id FROM Patient) AND familyName LIKE '%doe%';
我已经浏览了一段时间,还没有找到一个理想的解决方案,否则,这是迄今为止我找到的唯一其他解决方案

我可以使用的另一种选择/查询是在患者和用户之间创建内部联接,然后过滤结果:

SELECT Patient.id
      ,User.familyName
FROM Patient 
    INNER JOIN User ON Patient.userId = User.id 
WHERE User.familyName LIKE '%doe%';

但是,我也没有找到使用jugglingdb连接的解决方案。

只要关系存在,您就可以始终使用include功能。例如:

Patient.belongsTo(User, { as: 'user', foreignKey: 'userId' });

// Empty callback for async getter.
var c = function () { };

Patient.all({ 
    where: { blah: blash }, 
    include: [ 'user' ] 
}, function (err, patients) {
        var user = patients[0].user(c);
    }
);
Role.belongsTo(User, { as: 'role', foreignKey: 'roleId' });

Patient.all({ 
    where: { blah: blash }, 
    include: [ { user: 'role' } ]
}, function (err, patients) {
        var user     = patients[0].user(c);
        var userRole = user.role(c);
    }
);
您甚至可以将关系包含到关系中。例如:

Patient.belongsTo(User, { as: 'user', foreignKey: 'userId' });

// Empty callback for async getter.
var c = function () { };

Patient.all({ 
    where: { blah: blash }, 
    include: [ 'user' ] 
}, function (err, patients) {
        var user = patients[0].user(c);
    }
);
Role.belongsTo(User, { as: 'role', foreignKey: 'roleId' });

Patient.all({ 
    where: { blah: blash }, 
    include: [ { user: 'role' } ]
}, function (err, patients) {
        var user     = patients[0].user(c);
        var userRole = user.role(c);
    }
);

需要注意的是,有时返回的关系对象(例如“角色”对象)可能是只读的。我还没有深入探究其背后的原因,因此我无法给您一个关于为什么、如何或在何处发生这种情况的自信答案,但我相信它可能在JugglingDB本身内部。

我还必须提一提,这只适用于多对一关系,而不是多对多关系。但是,有一个支持包含在多对多关系如果我运行第一个示例,它将执行
SELECT*FROM Patient
,然后执行
SELECT*FROM User WHERE id in…
。如果患者表有数千或数百万个结果,这将不理想。