我有一张桌子 - 评论.用户可以发布,如果不是网站的成员,但想要显示他们的详细信息.
因此,如果用户评论谁不是会员我会显示他们的帖子但不链接到他们的个人资料,因为他们没有.
因此,在以下查询中,我想返回行,即使没有连接:
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
Run Code Online (Sandbox Code Playgroud)
我想回来:
comment comment_by_name user_id url
------- --------------- ------- ----
hello dan 12 /dan
hey jane /jane
world jack 10 /jack
Run Code Online (Sandbox Code Playgroud)
但上面没有返回jane的数据,因为她没有user_id
即使连接为空,有没有办法返回所有数据?
使用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
Run Code Online (Sandbox Code Playgroud)
基本上INNER JOIN只选择一个表中的记录在另一个表上至少有一个匹配的记录,同时LEFT JOIN从左侧表(在您的情况下,它是comments)中选择所有行是否在另一个表上没有匹配.