我在siteID
列中有5行TableA(所以有5个不同的站点)。
我有TableB,用于存储用户ID以及他们有权访问的站点。我需要从TableA中获取所有5个siteID,并检查特定用户的TableB中是否没有任何SiteID。
我正在尝试与此伪代码类似的内容,但不确定语法应如何进行:
SET @invalidSites = (
SELECT COUNT(*)
FROM userSiteAccess AS usa
RIGHT JOIN customer.sitesVsUsers AS cust
ON usa.listOfSites = cust.siteID
WHERE cust.siteID IS NULL);
示例:
TABLE A
listOfSites
1
2
3
TableB
userID siteAccess
50 3
计数应该返回2,因为站点列表中还有2行(站点1和站点2),但是用户只能访问站点3。
答案 0 :(得分:0)
您需要使用LEFT JOIN
而不是RIGHT JOIN
,并且需要在ON
条件下指定用户ID。
SELECT COUNT(*)
FROM userSiteAccess AS usa
LEFT JOIN sitesVsUsers AS cust
ON usa.listOfSites = cust.siteID AND cust.userId = 2
WHERE cust.siteID IS NULL
答案 1 :(得分:0)
不存在:
select count(*) counter
from tablea a
where not exists (
select 1 from tableb
where userid = 50 and siteaccess = a.listofsites
)