首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MySql连接具有不同行号的多个表

MySql连接具有不同行号的多个表
EN

Stack Overflow用户
提问于 2016-08-14 18:36:50
回答 1查看 79关注 0票数 0

很抱歉,标题可能很混乱,但我不知道如何很好地描述我的问题。我也赞同我的英语,因为我不是一个母语。

假设我有这样的模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 _________                               _________
| Table 1 |                             | Table 2 |
|---------|          ______     ________|---------|
| id_a    |___      | join |   |        | id_b    |
| name    |   |     |------|   |        | info    |
|_________|   |_____| id_a |___|        | data    |
                    | id_b |            |_________|
                    |______|

在数据库中提供这些信息:

表1 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 _____________
| id_a | name |
|------|------|
|   1  | foo  |
|______|______|

表2 :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 _____________________
| id_b | info | data  |
|------|------|-------|
|   1  | bar  | baz   |
|   2  | kux  | corge |
|   3  | fred | quux  |
|______|______|_______|

连接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 _____________
| id_a | id_b |
|------|------|
|   1  |   1  |
|   1  |   2  |
|   1  |   3  |
|______|______|

在我的数据库中,我有与“联接”表相同类型的其他表。它们用于存储来自其他表的“表1”ID和其他ID(我只使用了模式中的一个联接表来简化问题)。

当我试图检索我想要的数据时,我首先使用了以下语法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT t1.*,
       t2.*
FROM table1 AS t1
LEFT JOIN join AS j
ON j.id_a = t1.id_a
LEFT JOIN table2 AS t2
ON t2.id_b = j.id_b
WHERE t1.id_a = ?

但是,由于结果是一个多行数组,当我只期望一个行时,我尝试使用GROUP_CONCAT.。

所以我的语法变成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT t1.*,
       GROUP_CONCAT(t2.info SEPARATOR '|') AS info,
       GROUP_CONCAT(t2.data SEPARATOR '|') AS data
FROM table1 AS t1
LEFT JOIN join AS j
ON j.id_a = t1.id_a
LEFT JOIN table2 AS t2
ON t2.id_b = j.id_b
WHERE t1.id_a = ?
GROUP BY t1.id_a

现在它工作得很好,并且返回一个行。

现在的问题是,我在多个联接中使用这个原则,每个联接都返回与其他连接不同数目的多行。然后复制级联值,我可以得到如下结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arrray(
    [...]
    'info' => 'bar|bar|bar|bar|kux|kux|kux|kux|fred|fred|fred|fred|',
    'data' => 'baz|baz|baz|baz|corge|corge|corge|corge|corge|quux|quux|quux|quux'
)

,所以我想知道是否有一种方法可以避免重复的值,并且仍然在一个请求中检索我想要的数据?

EN

回答 1

Stack Overflow用户

发布于 2016-08-14 18:42:41

给定您的数据,此查询应该返回所需的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT t1.*,
       GROUP_CONCAT(t2.info SEPARATOR '|') AS info,
       GROUP_CONCAT(t2.data SEPARATOR '|') AS data
FROM table1 t1 LEFT JOIN
     join j
     ON j.id_a = t1.id_a LEFT JOIN
     table2 t2
     ON t2.id_b = j.id_b
WHERE t1.id_a = ?
GROUP BY t1.id_a;

如果需要,可以使用DISTINCT删除副本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT t1.*,
       GROUP_CONCAT(DISTINCT t2.info SEPARATOR '|') AS info,
       GROUP_CONCAT(DISTINCT t2.data SEPARATOR '|') AS data
FROM table1 t1 LEFT JOIN
     join j
     ON j.id_a = t1.id_a LEFT JOIN
     table2 t2
     ON t2.id_b = j.id_b
WHERE t1.id_a = ?
GROUP BY t1.id_a;

但是,通常情况下,最好是修复查询,这样它就不会生成重复的查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38948593

复制
相关文章
jQuery 追加元素的方法如append、prepend、before
jQuery after() 方法在被选元素之后插入内容。 jQuery before() 方法在被选元素之前插入内容。 实例
用户5640963
2019/07/28
1K0
div标签
div标签 使用频率非常高的标签,表示 “一块分区” div是换行的标签 div中可以写内容,也可以写其他标签或div标签 一、代码实战 新建 html 文件 06-div.html,编写下方程序,运行看看效果吧 <!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <metanam
鹤川
2023/03/21
1.5K0
HTML中p标签中插入div标签会发生什么
问题: <p>中能不能插入<div>? 插入<div>会如何? 先试验一下 image.png 我们可以看到, <div>把<p>分成了两段, 并且div外字段并不在<p>内 解答: 可以
治电小白菜
2020/08/25
3.6K0
HTML中p标签中插入div标签会发生什么
jquery对div元素进行鼠标移动(稍稍修改下可以实现div跟随鼠标)
/* 网上找了资料都是对于event.clientX和offset().left进行了计算,但是去掉了这个计算方式,直接使用当前坐标也一样,效果都一样不太好 strHeader:标题 jquery定位字符串 strForm:窗体 jquery定位字符串 */ var isMove = false; //var x = 0; //var y = 0; //var offx = 0; //var offy = 0; function movePage(strHeader,strForm) { $(str
未来sky
2018/09/29
2.5K0
js、jQuery 获取文档、窗口、元素的各种值
浏览器当前窗口文档body的宽度: document.body.clientWidth;(仅仅是body的width) 浏览器当前窗口文档body的高度: document.body.clientHeight;(仅仅是body的height)
Krry
2018/09/10
14.1K0
JQuery选择器和JQuery包装集
(本文年代久远,请谨慎阅读)今天学习了JQuery的一些基本用法,包括JQuery选择器和JQuery包装集;
ZONGLYN
2019/08/08
3.1K0
如何用css控制伪元素,再也不用多写个div
使用伪元素实现hover动态效果。 以下是通过控制伪元素的背景来实现一个图片从右边向左边进入,看懂了就很容易明白。 欢迎交流 .nav { //line-height: @navbar_height; li{ margin-left: 20px; width: 128px; height: 46px; text-align: center; position: relative; &:before{ width: 128px;
杭州前端工程师
2018/06/15
1.2K1
jquery 标签中的属性操作
.arrt() 获取匹配的元素集合中的第一个元素的属性值,或设置每一个元素中的一个或多个属性值。 .attr(attributeName) $("em").attr("title"); q获取“em”集合中的第一个em 的title值。 .attr(attributeName,value) attributeName 要设置的属性名 value 这个属性设置的值 $("#greatp").attr('alt','she zhi shu xing zhi')
用户1197315
2018/01/19
1.6K0
jQuery中不同元素的作用
removeClass() - 从被选元素删除一个或多个类 toggleClass() - 对被选元素进行添加/删除类的切换操作 css() - 设置或返回样式属性
用户7718188
2021/10/07
1.7K0
JQuery Div scrollTop ScrollHeight
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop、scrollLeft、scrollHeight。其中 scrollHeight 属性,互联网上几乎搜素不到关于它的应用技巧,而我正好需要用到它。
全栈程序员站长
2022/09/15
2.8K0
Python---获取div标签中的文字
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
K同学啊
2019/01/22
5K0
jquery在iframe中选中父元素节点
我们在使用如layui的layer弹窗或者在页面上用别的方式打开的iframe中可能会要获取到父页面的某个元素
阿超
2022/08/17
1.8K0
html中的div span和frameset框架标签
Div和span 1.      div独占一层,由div九不允许有别的。 2.      span标签不是独自占用一行,span一般用来设置字体。 框架标签: 什么是框架标签,就是把一个页面分成很多
码农阿宇
2018/04/18
3.4K0
html中的div span和frameset框架标签
bootstrap快速入门笔记(五)-文本元素类,各种标签,排版
2,全局元素被直接赋予font-size 设置为 14px,line-height 设置为 1.428,<p> (段落)元素还被设置了等于 1/2 行高(即 10px)的底部外边距(margin)
用户3055976
2018/09/12
7710
jQuery 替换元素中class的方法
实现方法: ① 使用removeClass()删除旧的class ② 使用addClass()添加新的class ③ 使用attr 直接替换原class ④ 使用 toggleClass 有就移除,没有就添加
青梅煮码
2023/01/16
2.3K0
jQuery 元素操作
jQuery 元素操作主要讲的是用jQuery方法,操作标签的遍历、创建、添加、删除等操作。
星辰_大海
2020/10/09
2.7K0
jQuery 元素操作
GNE预处理技术——把 div 标签中的正文转移到 p 标签中
大部分的新闻网站,其新闻正文是在 p 标签中的。所以 GNE 在统计文本标签密度时,会考虑 p 标签的数量和 p 标签中文本的数量。
青南
2019/09/25
9960
GNE预处理技术——把 div 标签中的正文转移到 p 标签中
python测试开发django-166.jQuery 使用append()动态添加div元素
在页面上动态添加div元素,比如用户在添加多个银行卡的时候,可以动态添加和删除div元素
上海-悠悠
2021/11/16
2.1K0
div在div中垂直居中水平居中(css如何让div水平居中)
最近写网页经常需要将div在屏幕中居中显示,遂记录下几个常用的方法,都比较简单。 水平居中直接加上<center>标签即可,或者设置margin:auto;当然也可以用下面的方法
全栈程序员站长
2022/08/01
15.1K0
div在div中垂直居中水平居中(css如何让div水平居中)
jquery 元素尺寸
从上面的示例可以看到,使用width()和height()分别可以获取元素div的width和height的值。
Devops海洋的渔夫
2019/06/02
1.6K0

相似问题

不工作的Spring事务+ JAX WS + JDBC

31

Spring jdbc事务发布

24

JDBC事务不工作

21

Spring 3 JDBC事务管理器不工作

12

将spring JDBC事务与hibernate事务隔离

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文