3

我试图从三个表中获取值,即使一个表是空的。因为我可以根据following.follow_id行是否为空来使用 if else 语句。

SELECT user.id, user.username,user.email, userdetails.profile_img, following.follow_id 
FROM user 
JOIN userdetails ON user.id = userdetails.user_id 
JOIN following ON user.id = following.follow_id 
GROUP BY user.id;

目前,它仅在 row 上有值时才给我该值following.follow_id。但是即使有一个空表,我也可以从 user_id 获得所有结果。

有什么线索吗?

4

3 回答 3

4

用“LEFT JOIN”替换“JOIN”,这意味着“INNER JOIN”应该可以解决问题。

于 2013-04-20T13:19:19.673 回答
1

是的,您需要使用 OUTER 连接来完成此操作。

原因是当你只是说 JOIN 时,这实际上被解释为 INNER JOIN,在这种情况下,所有表中都需要匹配。

于 2013-04-20T13:22:39.977 回答
1

现在,您正在对这 3 个表使用 INNER 联接。这意味着您将只取回在其他表中具有相应行的行。也就是说,如果给定的 user.id 没有对应的 following.follow_id 和 userdetails.user_id,那么该行将被忽略。

相反,如果您使用从用户到其他表的 LEFT JOIN(左外连接),我认为您应该得到您正在寻找的结果。

有关 INNER 与 OUTER 联接的更多信息,这个问题可能会有所帮助: “INNER JOIN”和“OUTER JOIN”有什么区别?

于 2013-04-20T13:23:55.393 回答