1

这有点令人困惑,因此我将逐步解释我的目标,下面是我正在处理的表(第一表第二表第三表)。首先,我需要验证First Tableusername上是否存在来自Second Table的,如果不存在,则删除没有共同点的username

结果应该是这样的(乔治被排除在外,因为它与First Table没有共同的用户名):

user_id | username
5423    | Bob
43      | Vicky

那么我想通过比较上面的结果和第三个表来验证。我的目标是检查上述结果中的第三个表user_id AND username上是否有共同的行,如果有,则排除该行,并仅检索唯一的行。

总体结果应为以下结果,因为 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
4

2 回答 2

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的值。

于 2013-10-14T01:59:10.420 回答
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`
于 2013-10-14T05:20:48.067 回答