SQL JOIN 不能找到客人,只能找到用户。
SQL JOIN 不能找到客人,只能找到用户。
我正在使用这行SQL代码:
SELECT DISTINCT tb_online.ip, tb_users.id, tb_online.login, tb_online.page FROM tb_online JOIN tb_users ON tb_online.login=tb_users.username ORDER BY login ASC
问题在于这行代码ON tb_online.login=tb_users.username
意味着SQL查询只选择用户,而不选择访客(他们在tb_users
表中没有用户名)。
如何使SQL查询能够同时选择用户和访客?
问题的原因是使用了left join
,而不是join
。在这个查询中,left join
将返回左表(tb_online
)的所有行,而不仅仅是与右表(tb_users
)匹配的行。因此,当使用left join
时,查询将找到所有在线用户(左表),而不仅仅是已注册用户(右表)。因此,这个查询找不到访客,只能找到已注册用户。
要解决这个问题,需要使用join
而不是left join
。这样,查询将只返回与右表匹配的行,即已注册用户。下面是修改后的查询:
SELECT DISTINCT tb_online.ip, tb_users.id, tb_online.login, tb_online.page FROM tb_online JOIN tb_users ON tb_online.login=tb_users.username ORDER BY login ASC
使用这个修改后的查询,将只返回已注册用户(右表),而不是所有在线用户(左表)。这样,问题就得到了解决。