加入MySQL表:在左表的一行中显示右表的所有结果

时间:2012-08-02 14:35:41

标签: mysql join view

以下是表一(人)中的一些数据

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

还尝试了内连接。

1 个答案:

答案 0 :(得分:1)

MySQL有一个函数GROUP_CONCAT,可以将行连接成一个字符串。

这样的事情应该有效:

SELECT person.*, (
    SELECT GROUP_CONCAT(attribute SEPARATOR ',')
    FROM Attribute
    WHERE person.id = Attribute.person_id
) as attributes
FROM `person`

我在这台机器上没有MySQL,所以如果有小错误我会道歉。