【问题标题】:Join MySQL Tables: Display All Results From Right Table In One Row Of Left Table连接 MySQL 表:在左表的一行中显示右表的所有结果
【发布时间】:2023-03-20 11:10:01
【问题描述】:

这是表一中的一些数据(人)

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 表中的第一个结果

标签: mysql join view


【解决方案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”
  • 其实那是我的错。这非常有效。有没有人告诉过你,你今天是个天才:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多