我通常在工作中使用数据库没有问题,是的,他们的结构是令人困惑的。但是,我能挺过去。好吧,我应该生成一个查询,在这个查询中,它将显示没有拥有CEO角色或Admin角色的用户的每个帐户。
每个账号至少有3个用户,每个用户最多可以有10个不同的角色。包括管理员或首席执行官。
Cols
AK_lAccountID =账号对应的ID
sAcctName =帐户名
PK_lCustomerID =客户标识对应的ID
表格
tUsers =用于存储用户值的表
tCustomers =用于存储客户值(ID、名称、状态等)的表
tSalesStatus =用于存储销售状态的表
tUserRoles =存储用户角色(管理员、首席执行官、用户等)的表
sSQLs = " SELECT DISTINCT AK_lAccountID, sAcctName, PK_lCustomerID " & _
" FROM tUsers u, tCustomers c, tSalesStatuses ss, tRegions r, tUserRoles ur " & _
" WHERE u.FK_lCustomerID = PK_lCustomerID AND " & _
" u.FK_lRegionID = PK_lRegionID AND " & _
" PK_lRegionID = 1 AND " & _
" c.FK_lSalesStatusID = ss.PK_lSalesStatusID AND " & _
" FK_lSalesStatusID = 8 AND " & _
" ur.FK_lUserID = PK_lUserID AND " & _
" ur.FK_lRoleID = FK_lRoleID AND " & _
" FK_lRoleID NOT IN (3, 15) " & _
" GROUP BY AK_lAccountID, sAcctName, PK_lCustomerID " & _
" HAVING COUNT(*) >= 2 " & _
" ORDER BY sAcctName "此外,用户可以拥有多个角色。
不管怎样,出于某种原因,它只是在拉取所有的记录。即使它有CEO用户或管理员。
还忘了提一下,用户角色是int值。
CEO = 15管理员=3
发布于 2015-08-07 02:41:32
为此,您需要使用exists -clause。由于您的数据库结构对我来说并不是100%清楚,所以我假设您需要这样的东西:
SELECT
AK_lAccountID,
sAcctName,
PK_lCustomerID
FROM
tCustomers c,
tSalesStatuses ss,
tRegions r
WHERE
PK_lRegionID = 1 AND
c.FK_lSalesStatusID = ss.PK_lSalesStatusID AND
FK_lSalesStatusID = 8 AND
not exists (
select 1
from
tUsers u
join tUserRoles ur on ur.FK_lUserID = u.PK_lUserID
where
u.FK_lCustomerID = c.PK_lCustomerID AND
u.FK_lRegionID = r.PK_lRegionID AND
ur.FK_lRoleID IN (3, 15))
ORDER BY
sAcctName 或者至少你可以从中找出解决之道。
发布于 2015-08-07 02:41:09
这当然还没有经过测试,而且很可能需要对列进行一些调整,因为我不得不猜测列在哪里,但像这样的东西应该非常接近。
SELECT DISTINCT u.AK_lAccountID
, c.sAcctName
, c.PK_lCustomerID
FROM tUsers u
join tCustomers c on u.FK_lCustomerID = c.PK_lCustomerID
join tSalesStatuses ss on c.FK_lSalesStatusID = ss.PK_lSalesStatusID
join tRegions r on u.FK_lRegionID = r.PK_lRegionID
join tUserRoles ur on ur.FK_lUserID = u.PK_lUserID
AND ur.FK_lRoleID = u.FK_lRoleID
WHERE PK_lRegionID = 1
AND FK_lSalesStatusID = 8
AND FK_lRoleID NOT IN (3, 15)
GROUP BY u.AK_lAccountID
, c.sAcctName
, c.PK_lCustomerID
HAVING SUM(CASE WHEN ur.RoleName IN ('CEO', 'Admin') THEN 1 ELSE 0 END) = 0
ORDER BY c.sAcctName https://stackoverflow.com/questions/31863154
复制相似问题