我有一张桌子 - 评论。用户可以发布,如果不是网站的成员,但想要显示他们的详细信息。
因此,如果用户评论谁不是会员,我会显示他们的帖子,但不会链接到他们的个人资料,因为他们没有。
因此,在以下查询中,即使没有连接,我也希望返回行:
select wc.comment, wc.comment_by_name, wc.user_id, u.url from comments wc
join users u on wc.wag_uid = u.user_id
where id = '1237' group by wc.comment order by wc.dateadded desc
我想回来:
comment comment_by_name user_id url
------- --------------- ------- ----
hello dan 12 /dan
hey jane /jane
world jack 10 /jack
但上面没有返回jane的数据,因为她没有user_id
即使连接为空,有没有办法返回所有数据?
答案 0 :(得分:8)
使用LEFT JOIN
代替
SELECT wc.comment, wc.comment_by_name, wc.user_id, u.url
FROM comments wc
LEFT JOIN users u
on wc.wag_uid = u.user_id
WHERE id = '1237'
GROUP BY wc.comment
ORDER BY wc.dateadded DESC
基本上INNER JOIN
只选择一个表中的记录与另一个表上至少一个匹配的记录,而LEFT JOIN
选择左侧表中的所有行(< em>在你的情况下,它是comments
)是否在另一个表上没有匹配。