微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有一个表给实体(可以叫他们的人)和属性(一个人可以有任意数量属性).例如:

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,以便在“属性”表中包含没有值的PEOPLE记录 – 如果您只想在“属性”表中列出具有值的人员,请使用:

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

我知道这是一个例子,但是当您考虑有多少“约翰·史密斯”的时候,使用名称是参考诚信的不好选择.分配一个作为数值的user_id将是一个更好的选择.

原文地址:https://www.jb51.cc/mssql/82728.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐