mysql外链接

一,原由

在学习一个新知识以前,最好先了解一下你为什么要学习这个知识,这个知识或技术能帮你作什么,能够给你带来哪些帮助。
所以我先交代一下写这篇随笔的原由。html

我在作项目的时候遇到了一个比较有意思的状况,sql

首先说明我有以下两个比较重要的表学习

分别是 comment_table 和 comment_pic_tablespa

这两个表分别用于存评论和评论附带的图片code

下面是我之前出问题的查询sqlhtm

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 comment_table c,user_info_table u,comment_pic_table p 4 WHERE 
5 c.user_id=u.user_id AND 
6 p.comment_id=c.comment_id AND 
7 homestay_id='101622' ORDER BY comment_time DESC
8 LIMIT 0,3

你只须要注意我将comment_table 和comment_pic_table关联。blog

由于我想要查询完整的评论,确定是要将两者关联起来的。图片

如此问题就来了。table

对于有图片的评论,这样当然能够完整的查出我想要的数据(评论自己和评论图片)。class

可是,对于没有图片的评论,则该sql一条记录都查不出来。

这是因为 p.comment_id=c.comment_id 这个条件致使的。(由于没有图片,天然"p"表comment_id对应的记录为null。)

学过sql的看到这里应该已经发现问题了,没发现的本身慢慢看吧。

 

对此,我能想到的就是用外链接语法解决。

外链接分为左外链接,右外链接,和全外链接三种。

目前我还不清楚第三种的应用场景在哪里,固然,昨天我甚至不知道外链接有何做用,由于我从未使用过这种语法去实际的解决什么问题,即使我很早的便学习了外链接的概念和语法。

因此它的存在必然是有意义的,仍是学了好。否则指不定之后哪天遇到问题了都不知道该用什么技术去解决这个问题。

知识的广度和深度是同级的。

二,定义

左外链接,就是将两个表关联查询,可是和内链接不一样的是,对于关联查询没有知足搜索条件的记录,内链接一条都不显示,但左外链接仍然会显示左表的所有记录。(你能够给左表增长where条件再次过滤。)

三,代码

在了解了外链接的概念以后,个人sql就变成了以下形式:

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 ( 4  comment_table c INNER JOIN user_info_table u ON c.user_id=u.user_id
5  ) 6 LEFT JOIN comment_pic_table p ON p.comment_id=c.comment_id 7 AND homestay_id='101622'
8 ORDER BY comment_time DESC
9 LIMIT 0,3

 

这种sql相比较以前的来讲虽然查到数据了,可是仍然存在问题,就是多查了。

缘由上面已经说了:左外链接仍然会显示左表的所有记录。

可能有同窗会问了,你明明加了and过滤了啊,可是,这个and过滤的是右表的记录,而不是左表。所以左表依然显示所有记录。

 

对此咱们再次作出修改,修改以后的sql以下:

1 SELECT c.*,u.user_phone,u.user_headPic,u.user_email,p.comment_pic_path 2 FROM 
3 ( 4  comment_table c INNER JOIN user_info_table u ON c.user_id=u.user_id 
5  AND homestay_id='101622'
6 ) 7 LEFT JOIN comment_pic_table p ON p.comment_id=c.comment_id 8 ORDER BY comment_time DESC
9 LIMIT 0,3

如此一来,咱们就能够正确的查到想要的记录了。

原文出处:https://www.cnblogs.com/twz123/p/12063635.html

相关文章
相关标签/搜索