【问题标题】:Return only 1 record [duplicate]仅返回 1 条记录 [重复]
【发布时间】:2020-01-25 21:57:07
【问题描述】:

我有 2 个表,如下所示:

表 1personal

| uid      |      city     |
|----------|:-------------:|
| 1        |  Zurich       |
| 2        |  Chicago      |
| 3        |  London       |

表 2technologies

| uid      |      tech     |
|----------|:-------------:|
| 2        |  HTML         |
| 2        |  JavaScript   |
| 2        |  PHP          |

我使用的查询:

SELECT DISTINCT personal.city, technologies.tech
FROM personal
INNER JOIN technologies
ON personal.uid = 2

结果:

| Chicago      |  HTML         |
| Chicago      |  JavaScript   |
| Chicago      |  PHP          |

如您所见,我收到了 3 条记录。我的目标是只收到 1 条记录。所以字符串(HTML、JavaScript、PHP)应该在一个数组中(如果可能的话)或者它们应该用分号分隔。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    像这样使用GROUP_CONCAT()

    SELECT personal.city, GROUP_CONCAT(technologies.tech)
    FROM personalINNER JOIN technologies 
    ON technologies.uid = personal.uid
    WHERE personal.uid = 2
    GROUP BY personal.city
    

    您还可以通过以下方式设置项目的顺序:

    GROUP_CONCAT(technologies.tech ORDER BY technologies.tech)
    

    或为订单选择另一列。

    【讨论】:

      【解决方案2】:

      DISTINCT 关键字始终适用于选择列表中的所有列,而不仅仅是DISTINCT 关键字后面的单个列。它完成了它的设计目标,它返回了足够多的行,因此没有一行与另一行具有相同的一组值。

      如果你想要芝加哥的一行,基本上在一列上做一个DISTINCT,使用GROUP BY

      SELECT personal.city, ...what goes here?
      FROM personal
      INNER JOIN technologies
      ON personal.uid = 2
      GROUP BY personal.city
      

      MySQL 有一个函数GROUP_CONCAT() 将多个值附加在一起,因为它将一组中的多行折叠成一行。

      SELECT personal.city, GROUP_CONCAT(technologies.tech) AS list_of_tech
      FROM personal
      INNER JOIN technologies
      ON personal.uid = 2
      GROUP BY personal.city;
      

      详情请见https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html#function_group-concat。可以选择更改值之间的分隔符、对值进行排序或消除重复项。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多