SQL JOIN 不能找到客人,只能找到用户。

18 浏览
0 Comments

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查询能够同时选择用户和访客

0
0 Comments

问题的原因是使用了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

使用这个修改后的查询,将只返回已注册用户(右表),而不是所有在线用户(左表)。这样,问题就得到了解决。

0