Mysql 将两个联接表和一个数据表返回到一个字符串中,该字符串以逗号分隔,并用GROUP CONCAT分隔

Mysql 将两个联接表和一个数据表返回到一个字符串中,该字符串以逗号分隔,并用GROUP CONCAT分隔,mysql,sql,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 |

从这些表格中:

 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
我想通过t1.id与table_b.name连接,选择table_a.space(例如table_a.space=5)组中具有特定数字的每个字段,其中owner=table_b.id和一个新列,该列包含由逗号分隔的符合项:table_a.id=table_c.c_id还包括table_c.version=2

所以。。我的尝试(我尝试了很多事情,使用分组、使用等,但没有成功

那么,什么工作没有错误

 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

您在问题的中间更改了命名约定。

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,将所有的东西分组为1行。GROUPBY告诉MySQL将其按特定列分组。

< P>您在问题的中间更改了命名约定。
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,您将所有内容都分组到一行中。GROUP BY告诉mysql按特定列进行分组。

您的问题令人困惑,因为您从表a、表b、表c切换到了t1、t2 t3,并且您似乎不确定要如何对它们进行分组。您的问题令人困惑,因为您从表a、表b、表b切换到了表ble_c到t1,t2和t3,您似乎不确定要如何将它们分组。谢谢您的帮助。我只是做了一些修改,这就是我需要的(不需要WHERE子句中的t3.vs=2。我以前尝试过,但使用了错误的分组,然后我检查了手册,意识到我做错了什么。感谢帮助。我只做了一些修改,这就是我需要的(WHERE子句中不需要t3.vs=2。我以前尝试过,但使用了错误的分组,然后我检查了手册,意识到我做错了什么