从mysql中的多个表中获取特定结果

时间:2013-10-14 01:52:31

标签: php mysql sql mysqli row

这有点令人困惑,因此我将逐步解释我的目标,下面是我正在处理的表格(第一个表第二个表,和< 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

2 个答案:

答案 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`