2013-10-14 37 views
1

这是有点混乱,所以我会一步解释我的目标大步,下面是我的工作表(第一个表二表,并三表)。首先,我需要验证,如果从第二个表username并在第一个表存在,如果没有,删除不具有共同username获得来自多个表的具体结果在MySQL

结果应该是这样的一个(乔治被排除因为它没有常见的用户名第一个表):

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 
+0

http://stackoverflow.com/questions/18443543/create-view-or-use-innerjoins可能是使用 –

回答

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

+0

第一个表没有user_ID的,它只是一个列表的用户名,因此这行a.user_ID是无效的 – user1973799

+0

看到我更新的答案。 –

+0

你钉了它!感谢兄弟,我非常感谢! – user1973799

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`