Mysql 使用jugglingdb选择另一个表中存在id的结果
我正试图使用jugglingdb(和mysql适配器)获取患者列表。我们的模式设置为患者必须是用户,但用户不一定是患者。这意味着患者有一个用户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(…来获取用户对象/用户名。这对于少量记录来说是可以的,但对于数
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…
。如果患者表有数千或数百万个结果,这将不理想。