mysql - 将两张连接表和一张数据表返回成一个用GROUP CONCAT逗号分隔的字符串

标签 mysql sql

来自这个表:

 table_a
 id | date       | owner | space
 1  |  85408503  |  4    |  5
 2  |  52345234  |  5    |  5
 3  |  52345243  |  2    |  5

 table_b
 id | name     | age
 2  |  luis    |  32
 4  |  german  |  53
 5  |  marta   |  43

 table_c
 id | c_id       | stack |  vs 
 1  |     3      |  1    |   2
 2  |     3      |  4    |   2
 3  |     1      |  1    |   2
 4  |     3      |  4    |   3

我想选择 table_a.space 中具有特定编号的每个字段(例如 table_a.space = 5)以逗号分隔巧合:table_a.id = table_c.c_id 也是 table_c.version = 2

所以..我的尝试(我尝试了很多东西,使用 group by,使用等等,但都没有成功

所以什么工作没有错误

 SELECT t1.id,t1.owner,t3.vs      
 FROM table_a t1 LEFT JOIN table_b t2 ON t1.owner = t2.id 
 LEFT JOIN table_c t3 ON t1.id = t3.c_id 
 WHERE t1.space = 5 GROUP BY t1.id ORDER BY t1.id

我知道这会放入一个字符串中(如果我把它放在“t1.owner”之后,它只会返回一行

 GROUP_CONCAT(DISTINCT t3.stack SEPARATOR ',') as selected     

我不知道把 t3.vs 的巧合放在哪里

 AND t3.vs = 2

我希望它在 t1.space = 5 时返回

id  |  owner| space | vs | selected  
 2  |  5    |  5    |  2 |
 3  |  2    |  5    |  2 | 1,4

当 t1.space = 3 时

这应该返回

id  |  owner| space | vs  |selected  
 3  |  2    |  5    | 2

最佳答案

您在问题中间更改了命名约定。你想要的是使用 GROUP BY

SELECT t1.id,t1.owner, GROUP_CONCAT(DISTINCT t3.stack SEPARATOR ',') as selected
FROM table_a t1 LEFT JOIN table_b t2 ON t1.owner = t2.id 
LEFT JOIN table_c t3 ON t1.id = t3.c_id 
WHERE t1.space = 5 AND t3.vs=2
GROUP BY t1.id
ORDER BY t1.id

如果没有 GROUP BY,您会将所有内容分组到 1 行中。 group by 告诉 mysql 按特定列对其进行分组。

关于mysql - 将两张连接表和一张数据表返回成一个用GROUP CONCAT逗号分隔的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32725682/

相关文章:

php - 使用php将数据合并到一列mysql中

mysql - 备份数据库以及与数据库相关的文件

javascript - 如何在我的 php mysql 中实现 Livestamp.js + Moment.js

php - 使用 php 检查重复的电子邮件条目

mysql - 未添加默认枚举

sql - PL/SQL 开发人员如何获取导致插入失败的行?

mysql - 如何在没有 ON 子句的情况下连接 2 个表

SQL:你会如何保存用户自己的数据?

c# - 连接字符串 : 'database' 中不支持关键字

sql - SQL中根据另一列查找某一列值的最大出现次数