比较 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
)
子选择-解决方案:
您可以使用 IN
和 NOT 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)
我正在尝试从 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
)
子选择-解决方案:
您可以使用 IN
和 NOT 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)