我在sqlserver中有3个表:
CL.run(function* () {
var photondata = 0;
while (true) {
yield CL.try(function* () {
var data = yield photon.variable("witok", CL.cb());
console.log("data: ", data.result);
photondata = data.result;
}, function* (err) {
console.log(err.message);
});
if (photondata >= 1) break;
yield CL.sleep(1000);
}
// do whatever you need here
});
用户可以为他分配多个角色,这将显示在“多对多”表中。
在我的存储过程中,我需要tbl_Users - User_ID, User_Name
tbl_Roles - Role_ID, Role_Name
tbl_Users_Roles_MTM - User_ID, Role_ID
NOT 分配给特定的Role_Name
(作为参数提供)。
我想我应该使用INNER JOIN(或LEFT one ...)。
SO和其他论坛中有很多条目的问题几乎与此类似但不完全相似。我做了很多实验但是现在我完全失去了手脚!
谢谢大家。
编辑:
在SO的优秀人才的帮助下,我得到了它的工作:
User_ID
太棒了!!!!!!
答案 0 :(得分:1)
尝试此查询:
SELECT r.Role_Name
FROM tbl_Roles r
WHERE NOT EXISTS (
SELECT 1
FROM tbl_Users_Roles_MTM ur
WHERE ur.User_ID = @User_ID
AND ur.Role_ID = r.Role_ID);
答案 1 :(得分:0)
你可以这样做:
SELECT *
FROM Roles
WHERE Role_Name = @rolename
AND NOT EXISTS(SELECT 1
FROM tbl_Roles AS r
INNER JOIN tbl_Users_Roles_MTM AS ur ON ur.Role_ID = r.Role_ID
WHERE r.role_Name = @rolename
AND ur.User_ID = @User_ID);
NOT EXISTS
谓词将确保该角色未分配给任何用户。
答案 2 :(得分:0)
SELECT r.*
FROM tbl_Roles r
LEFT JOIN tbl_Users_Roles_MTM ur
ON r.Role_ID = ur.Role_ID
AND ur.User_ID = @User_ID
WHERE ur.User_ID IS NULL
答案 3 :(得分:0)
我会做这样的事情
select roles.Role_Name
from tbl_Roles as roles
left join tbl_Users_Roles_MTM as userRoles
on userRoles.Role_ID = roles.Role_ID
and userRoles.[User_ID] = @User_ID
where userRoles.Role_ID is null
基本上是左连接,然后只选择那些尚未连接的行