gpt4 book ai didi

sql - 将一行连接到另一个表中的多行

转载 作者:IT老高 更新时间:2023-10-28 23:48:47 26 4
gpt4 key购买 nike

我有一张实体表(让我们称他们为人)和属性(一个人可以拥有任意数量的属性)。例如:

Name  Age
--------
Jane 27
Joe 36
Jim 16

属性

Name   Property
-----------------
Jane Smart
Jane Funny
Jane Good-looking
Joe Smart
Joe Workaholic
Jim Funny
Jim Young

我想编写一个高效的选择,根据年龄选择人并返回他们的全部或部分属性。

Ex: People older than 26
Name Properties
Jane Smart, Funny, Good-looking
Joe Smart, Workaholic

也可以返回属性之一和属性总数。

查询应该是高效的:人表有几百万行,属性表有几十万行(所以大多数人没有属性)。一次选择数百行。

有什么办法吗?

最佳答案

用途:

   SELECT x.name,
GROUP_CONCAT(y.property SEPARATOR ', ')
FROM PEOPLE x
LEFT JOIN PROPERTIES y ON y.name = x.name
WHERE x.age > 26
GROUP BY x.name

您需要 MySQL 函数 GROUP_CONCAT (documentation) 以返回 PROPERTIES.property 值的逗号分隔列表。

我使用 LEFT JOIN 而不是 JOIN 来包含 PROPERTIES 表中没有值的 PEOPLE 记录 - 如果您只想要 PROPERTIES 表中具有值的人员列表,请使用:

   SELECT x.name,
GROUP_CONCAT(y.property SEPARATOR ', ')
FROM PEOPLE x
JOIN PROPERTIES y ON y.name = x.name
WHERE x.age > 26
GROUP BY x.name

我知道这是一个示例,但是当您考虑到有多少“John Smith”时,使用名称对于引用完整性来说是一个糟糕的选择。分配一个 user_id,作为每个用户的唯一值,将是一个更好的选择。

关于sql - 将一行连接到另一个表中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2892816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com