比较 SQL 中的 3 个表,结果在 A、B 而不是 C

Compare 3 tables in SQL, with result found in A, B, not C

我正在尝试从 3 个表中获取结果,但显示的记录反映了 来自 A 的用户也在 B,但不在 C

Table A   =   Table B  not in   Table C
-------      --------          --------
UserName     UserName           UserName

如果这太基础了,我深表歉意。我是这方面的新手,无法从我用谷歌搜索的东西中得到任何东西。

有几种方法可以做到这一点,一种是使用 LEFT JOIN:

Select      *
From        TableA  A
Join        TableB  B   On  A.UserName = B.UserName
Left Join   TableC  C   On  A.UserName = C.UserName
Where       C.UserName Is Null;

另一种方法是使用 WHERE NOT EXISTS:

Select      *
From        TableA  A
Join        TableB  B   On  A.UserName = B.UserName
Where Not Exists
(
    Select  *
    From    TableC  C
    Where   C.UserName = A.UserName
)

子选择-解决方案:

您可以使用 INNOT IN 的两个子选择来抓取它们,例如:

SELECT T1.UserName
  FROM Table1 T1
 WHERE T1.UserName     IN (SELECT UserName FROM Table2)
   AND T1.UserName NOT IN (SELECT UserName FROM Table3)

加入解决方案:

或者您可以使用 JOINs,例如:

     SELECT DISTINCT T1.UserName
       FROM Table1 T1
 INNER JOIN Table2 T2
         ON T1.UserName = T2.UserName
 LEFT OUTER JOIN Table3 T3
         ON T1.UserName = T3.UserName
      WHERE T3.UserName IS NULL

EXISTS-解决方案:

如果您更喜欢EXISTS,您可以这样做:

SELECT T1.UserName
  FROM Table1 T1
 WHERE     EXISTS (SELECT 1 FROM Table2 T2 
                           WHERE T1.UserName = T2.UserName)
   AND NOT EXISTS (SELECT 1 FROM Table3 T3 
                           WHERE T1.UserName = T3.UserName)