我有3個表,我想只選擇所有有用戶角色的賬戶,也就是說,如果賬戶同時有管理員和用戶角色,那么就不選擇他們。
我被卡住了,如果有人能幫助我,非常感謝。
Account_Role:
Account_Role:
uj5u.com熱心網友回復:
你可以使用聚合:
select accountid
from accountrole ar join
角色r
on ar.roleid = r.id
group by accountid
having count(*) = 1 and min(r。 role) = 'user'。
uj5u.com熱心網友回復:
你可以使用inner join, exists和closure,如下:
SELECT AccountID, Username, Password
FROM Account A JOIN Account_Role AR
ON A.AccountID = AR.AccountID
JOIN Role R
ON R.RoleID = AR.RoleID
WHERE R.Role= 'User'
AND NOT EXISTS (
SELECT * FROM Accout_Role AR2, Role R2
WHERE AR2.RoleID = R2.RoleID
AND A.AccountID = AR2.AccountID
AND R2.Role <> 'User'
);
uj5u.com熱心網友回復:
創建資料:
DECLARE @account TABLE(AccountId INT, Username NVARCHAR(255), Password NVARCHAR(255)
DECLARE @role TABLE (Id INT, Role NVARCHAR(255)
DECLARE @account_role TABLE (AccountId INT, RoleId INT)
INSERT INTO @account VALUES (1, 'admin', null), (2, 'user1', null), (3, 'user2', null)
INSERT INTO @role VALUES (1, '管理員'), (2, '用戶')
INSERT INTO @account_role VALUES (1, 1)。) (1, 2), (2, 2), (3, 2)
選擇所有擁有roleId 2但沒有擁有roleId 1的帳戶:
SELECT a.* FROM @account a
INNER JOIN @account_role ar ON ar.AccountId = a.AccountId
INNER JOIN @role r ON ar.RoleId= r.Id
WHERE r.Id = 2
AND a. AccountId NOT IN (SELECT AccountIdFROM @account_role WHERE RoleId = 1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/322161.html
標籤:


