我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

mysql使用left join进行联合多表查询(处理多表查询时,某表数据为空值的处理以及将结果集中多条数据一行显示的处理)

文章是按照需求分析和陷阱序列场景再现的顺序来写的。

如果你不是新手,可以直接跳到最后看代码来大概了解一下。

一共有三张表,分别是

买家表,记录用户信息

该表记录了用户拥有哪些标签以及分配标签的人。 它是用户和标签之间的关系表。 它通常不用于记录需要显示到UI的数据。

mysql联合查询语句_mysql3表联合查询语句_mysql多表联合查询

该表可以直接理解为标签表,其中包含了每个标签的信息。 由于这个标签是为买家创建的,所以名称比较长。 本例中可以直接理解为tag

mysql联合查询语句_mysql3表联合查询语句_mysql多表联合查询

在实际应用中,我们经常需要用一句话来查询我们需要的简单信息。

所以我们需要联合查询

其中,联合查询可以直接使用多表,也可以使用左连接。

我们通过实际操作来看看具体的函数需要哪些语法。

第一个要求是这样的:

找到以下显示效果的信息:

mysql多表联合查询_mysql联合查询语句_mysql3表联合查询语句

需要查询的字段有

买家id、买家昵称、标签名(注意这只是一张关系表,查询时需要用到这张表,但其字段不显示)

而且,当买家有多个标签时,我们用“标签1,标签2,标签3”来使用一行数据,标签字段使用逗号分隔显示。

那么,我们想到的就是使用多表联合基础查询

看看这个5908买家的所有标签

mysql3表联合查询语句_mysql多表联合查询_mysql联合查询语句

但如果我们想要家庭成员,就需要用到微信普通客户等一行数据。

这就是它的工作原理

mysql多表联合查询_mysql3表联合查询语句_mysql联合查询语句

但是这样有一个问题,就是如果使用where=条件时返回了一条数据,那么使用时也会合并为一行,如下:

mysql3表联合查询语句_mysql多表联合查询_mysql联合查询语句

可以看到,这显然不是我们想要的结果,因为我们需要分别显示这三个买家的信息及其标签。 然后我们需要添加一个group by,否则默认是一行表达所有结果

mysql3表联合查询语句_mysql多表联合查询_mysql联合查询语句

好吧,看来没有什么问题了。 但注意到这里没有5910的信息吗? 为什么? 因为在where条件中,这种联表查询时,当其中一个条件不满足时,就不会返回结果。

该语句中,在检索买家标签关系表时,没有5910的标签关联信息,因此匹配为空,不返回该结果。

后来摸索,在where条件中使用,在子集中使用if,等等很多方法(因为我也是中途出家的)最后都失败了。

然后我又拿起书,在上查资料,想到了left join。

这种左连接的特点是,查询时,如果前一个表有数据,则返回前一个查询表中的数据。 如果后续表不匹配,则为空。 这似乎就是我们想要的结果。

所以使用左连接代替

这里要注意.tagid的关系。 例如,结果的第一行,只有一个id,name为2。显然,id是错误的,因为它没有用。

更改:

这是正确的。

由于我们不需要使用tagid字段,所以我们可以将其删除,并且不会影响结果。 只要正确表达关系陈述中的关系即可。

最后,我们在where条件中添加我们要搜索的买家的ID集合。

结果是正确的。

但在实际使用中,我们可能还需要使用关联的拼音检索表,基于电话查询等场景,所以我们还需要更改where Buyer。 进入我们自己的查询语句中,例如

或者添加根据电话号码的查询(如果应用中没有判断给定内容是字符串还是数字,直接添加条件即可,不会对性能影响太大)

如果要分开搜索数字和字母,可以在查询数据库之前使用应用程序确定查询条件。 比如判断是数值检索,则对该字段进行查询。

mysql联合查询语句_mysql多表联合查询_mysql3表联合查询语句

这使得查询变得简单。

如果这两个查询返回的结果放在where in语句中,就相当于1,2,3,4,5这样的数据

所以添加拼音和电话搜索的句子是这样的

圈出的位置代替了之前的5908,5909,5910

查询示例:

二维码
扫一扫在手机端查看

本文链接:https://by928.com/96.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线