sql – 将一行连接到另一个表中的多行
发布时间:2020-12-12 16:13:33 所属栏目:MsSql教程 来源:网络整理
导读:我有一个表给实体(可以叫他们的人)和属性(一个人可以有任意数量的属性).例如: 人 Name Age--------Jane 27Joe 36Jim 16 属性 Name Property-----------------Jane SmartJane FunnyJane Good-lookingJoe SmartJoe WorkaholicJim FunnyJim Young 我想写一个有
我有一个表给实体(可以叫他们的人)和属性(一个人可以有任意数量的属性).例如:
人 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将是一个更好的选择. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |