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

Php 从mysql中的多个表中获取特定结果,php,mysql,sql,mysqli,row,Php,Mysql,Sql,Mysqli,Row,这有点令人困惑,因此我将逐步解释我的目标,下面是我正在处理的表格(第一个表格,第二个表格,和第三个表格)。首先,我需要验证第二个表中的用户名是否存在于第一个表中,如果不存在,请删除没有通用用户名的用户名 结果应该是这样的(George被排除在外,因为它没有第一个表的通用用户名): 然后,我想通过比较前面的结果和第三个表来验证。我的目标是检查前面结果中的用户id和用户名是否在第三个表中有公共行,如果有,则排除该行,只检索唯一的行 由于第三个表中尚不存在5423 | Bob,因此总体结果应如下所示:

这有点令人困惑,因此我将逐步解释我的目标,下面是我正在处理的表格(第一个表格第二个表格,和第三个表格)。首先,我需要验证第二个表中的
用户名是否存在于第一个表中,如果不存在,请删除没有通用
用户名的用户名

结果应该是这样的(George被排除在外,因为它没有第一个表的通用用户名):

然后,我想通过比较前面的结果和第三个表来验证。我的目标是检查前面结果中的
用户id和用户名是否在第三个表中有公共行,如果有,则排除该行,只检索唯一的行

由于第三个表中尚不存在
5423 | Bob
,因此总体结果应如下所示:

总体结果:

user_id | username
5423    | Bob
第一张表:

| username
| Bob
| Jessie
| Vicky
user_id | username
5423    | Bob
123     | Georgie
43      | Vicky
第二张表:

| username
| Bob
| Jessie
| Vicky
user_id | username
5423    | Bob
123     | Georgie
43      | Vicky
第三张表:

user_id | username
1       | Luke
54      | Stephenie
43      | Vicky
第一个联接使用
内部联接
,因此结果列表中只有与条件匹配的记录。第二个联接使用
左联接
,因此左侧表中的所有记录(无论是否有匹配行)都将显示在结果列表中。任何不匹配的行在右侧表的列上都将有一个
NULL

因为您只想在最终结果上获得不匹配的记录,所以需要在右侧表中有过滤
NULL
值的
WHERE
子句

第一个联接使用
内部联接
,因此结果列表中只有与条件匹配的记录。第二个联接使用
左联接
,因此左侧表中的所有记录(无论是否有匹配行)都将显示在结果列表中。任何不匹配的行在右侧表的列上都将有一个
NULL

由于您只想在最终结果上获取不匹配的记录,因此需要在右侧表中使用过滤
NULL
值的
WHERE
子句。

尝试以下操作:

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`
选择b*
来自第一表a
内联接表b
在a.username=b.username上
左联接第三表c
在b.user\u ID=c.user\u ID上
其中b.`username`c.`username`
试试这个:

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`
选择b*
来自第一表a
内联接表b
在a.username=b.username上
左联接第三表c
在b.user\u ID=c.user\u ID上
其中b.`username`c.`username`

可能有用可能有用第一个表没有用户id,它只是一个用户名列表,因此这一行a.user\u id无效,您确定了!谢谢兄弟,我非常感激!第一个表没有user\u id,它只是一个用户名列表,因此这一行a.user\u id无效,你搞定了!谢谢兄弟,我非常感激!