连接 MySQL 表:在左表的一行中显示右表的所有结果
Posted
技术标签:
【中文标题】连接 MySQL 表:在左表的一行中显示右表的所有结果【英文标题】:Join MySQL Tables: Display All Results From Right Table In One Row Of Left Table 【发布时间】:2012-08-02 14:35:41 【问题描述】:这是表一中的一些数据(人)
Person Table
person_ID | Name | Address
1 | JC | 303 Main Street
2 | NM | 444 Nowhere Drive
和表二(属性)
Attribute table
person_ID | attribute
1 | dog
1 | cat
2 | bearded
当我加入表格时,我得到以下视图:
person_id | name | attribute
1 | JC | dog
1 | JC | cat
2 | NM | bearded
它们是左表的重复行。它包含相同的 person_id 等。我想将前两个结果组合成一行。像这样:
person_id | name | attribute | attribute
1 | JC | dog cat
2 | NM | bearded NULL
或者这个:
person_id | name | attribute
1 | JC | dog, cat
2 | NM | bearded
这是我尝试过的一些代码:
SELECT person.*,Attribute.att FROM `person`,`Attribute`
WHERE person.`person_id` = Attribute.person_id
AND name = "" group by person_id
左连接
Select * from person AS P
LEFT JOIN Attribute AS N
ON P.person_id = N.person_id
还尝试了内部连接。
【问题讨论】:
我不能删除任何属性。所有这些都需要显示。 Group By 仅显示 Attributes 表中的第一个结果 【参考方案1】:mysql 有一个函数GROUP_CONCAT,可以让您将行连接成一个字符串。
这样的事情应该可以工作:
SELECT person.*, (
SELECT GROUP_CONCAT(attribute SEPARATOR ',')
FROM Attribute
WHERE person.id = Attribute.person_id
) as attributes
FROM `person`
我这台机器上没有MySQL,如果有小错误,我很抱歉。
【讨论】:
请注意,GROUP_CONCAT 也有一些排序选项,以防结果可预测对您很重要。 感谢您的回复。我在 where 子句中遇到无法识别的列错误。无法识别“person_id” 其实那是我的错。这非常有效。有没有人告诉过你,你今天是个天才:)以上是关于连接 MySQL 表:在左表的一行中显示右表的所有结果的主要内容,如果未能解决你的问题,请参考以下文章