计算一个表中一列中的行数不会出现在另一表中

时间:2019-07-15 21:26:38

标签: mysql

我在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。

2 个答案:

答案 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

DEMO

答案 1 :(得分:0)

不存在:

select count(*) counter
from tablea a
where not exists (
  select 1 from tableb
  where userid = 50 and siteaccess = a.listofsites  
)