这有点令人困惑,因此我将逐步解释我的目标,下面是我正在处理的表格(第一个表,第二个表,和< strong>第三表)。首先,我需要验证第一个表中的username
是否确实存在于第一个表,如果没有,请删除没有公共{{strong>}的username
1}}
结果应该是这样的(乔治被排除在外,因为它没有 First Table 的常用用户名):
user_id | username
5423 | Bob
43 | Vicky
那么我想通过比较上面的结果和第三表进行验证。我的目标是检查上面上面结果中的user_id AND username
是否在第三个表上有一个公共行,如果是,则排除该行,并仅检索唯一的行。
OVERALL结果应该是下面的结果,因为5423 | Bob
在第三张表中尚不存在:
总体结果:
user_id | username
5423 | Bob
第一张表:
| username
| Bob
| Jessie
| Vicky
第二张表:
user_id | username
5423 | Bob
123 | Georgie
43 | Vicky
第三表:
user_id | username
1 | Luke
54 | Stephenie
43 | Vicky
答案 0 :(得分:1)
SELECT b.*
FROM FirstTable a
INNER JOIN SecondTable b
ON a.username = b.username
LEFT JOIN ThirdTable c
ON b.user_ID = c.user_ID
WHERE c.user_ID IS NULL
第一次加入使用INNER JOIN
,以便只有符合条件的记录才会出现在结果列表中。第二个连接使用LEFT JOIN
,以便左侧表中的所有记录是否具有匹配的行将显示在结果列表中。任何不匹配的行在右侧表的列上都会有NULL
值。
由于您只希望获得最终结果的非匹配记录,因此您需要使用WHERE
子句来过滤右侧表中的NULL
值
答案 1 :(得分:0)
试试这个:
SELECT b.*
FROM FirstTable a
INNER JOIN SecondTable b
ON a.username = b.username
LEFT JOIN ThirdTable c
ON b.user_ID = c.user_ID
WHERE b.`username` <> c.`username`