Mysql 将整个表连接为一行
假设我有两张这样的桌子:Mysql 将整个表连接为一行,mysql,join,Mysql,Join,假设我有两张这样的桌子: --------+------- | id | name | --------+------- | 1 | Paul | | 2 | Jack | | 3 | Joe | --------+------- --------+-------- | id | Color | --------+-------- | 1 | Blue | | 2 | Red | | 3 | Pink
--------+-------
| id | name |
--------+-------
| 1 | Paul |
| 2 | Jack |
| 3 | Joe |
--------+-------
--------+--------
| id | Color |
--------+--------
| 1 | Blue |
| 2 | Red |
| 3 | Pink |
--------+--------
--------+-----------------
| Paul | Blue,Red,Pink |
--------+-----------------
SELECT * FROM main WHERE name = Paul CROSS JOIN colors WHERE 1;
SELECT table_names.name, GROUP_CONCAT(table_colors.color) AS color
FROM table_names
LEFT JOIN table_colors ON table_names.id = table_colors.id
我希望得到这样的结果:
--------+-------
| id | name |
--------+-------
| 1 | Paul |
| 2 | Jack |
| 3 | Joe |
--------+-------
--------+--------
| id | Color |
--------+--------
| 1 | Blue |
| 2 | Red |
| 3 | Pink |
--------+--------
--------+-----------------
| Paul | Blue,Red,Pink |
--------+-----------------
SELECT * FROM main WHERE name = Paul CROSS JOIN colors WHERE 1;
SELECT table_names.name, GROUP_CONCAT(table_colors.color) AS color
FROM table_names
LEFT JOIN table_colors ON table_names.id = table_colors.id
我不知道它是依赖于一个复杂的查询还是一个我可能错过的“简单”关键字。我在连接点附近搜索过如下内容:
--------+-------
| id | name |
--------+-------
| 1 | Paul |
| 2 | Jack |
| 3 | Joe |
--------+-------
--------+--------
| id | Color |
--------+--------
| 1 | Blue |
| 2 | Red |
| 3 | Pink |
--------+--------
--------+-----------------
| Paul | Blue,Red,Pink |
--------+-----------------
SELECT * FROM main WHERE name = Paul CROSS JOIN colors WHERE 1;
SELECT table_names.name, GROUP_CONCAT(table_colors.color) AS color
FROM table_names
LEFT JOIN table_colors ON table_names.id = table_colors.id
但这似乎并不容易,当然也不起作用
任何要搜索的提示或关键字都将不胜感激我认为
GROUP\u CONCAT()
函数正是您所需要的。试着这样做:
--------+-------
| id | name |
--------+-------
| 1 | Paul |
| 2 | Jack |
| 3 | Joe |
--------+-------
--------+--------
| id | Color |
--------+--------
| 1 | Blue |
| 2 | Red |
| 3 | Pink |
--------+--------
--------+-----------------
| Paul | Blue,Red,Pink |
--------+-----------------
SELECT * FROM main WHERE name = Paul CROSS JOIN colors WHERE 1;
SELECT table_names.name, GROUP_CONCAT(table_colors.color) AS color
FROM table_names
LEFT JOIN table_colors ON table_names.id = table_colors.id
使用
交叉连接
和组连接
查询
select t1.name,group_concat(distinct t2.color separator ',') as color
from tbl1 t1,tbl2 t2
where t1.name = 'Paul'
group by t1.name;
谢谢,这正是我想要的,它没有像预期的那样工作,但是谢谢你提供我所缺少的团队。