关键词搜索

源码搜索 ×
×

kingBase中从表多行变一列

发布2021-10-28浏览584次

详情内容

使用string_agg()方法。

准确来说,如何在一条SQL语句中,查找主表数据,同时将从表的多行记录的某一字段,集合成一个值,中间以逗号隔开,附在查找结果中一并返回?比如:

1、创建并初始化测试表

--主表
CREATE TABLE master(id SERIAL,hero varchar(50));
--从表
CREATE TABLE slave(id serial,master_id int,name varchar(50));

INSERT INTO master(hero) values('时不我与的悲剧英雄');//id = 1

INSERT INTO slave(master_id,name) values(1,'赵武灵王赵雍'),(1,'周世宗柴荣'),(1,'诸葛亮');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、走一个

SELECT a.*,b.persons FROM master a,
	(SELECT m.id,string_agg(s.name,',') AS persons 
	FROM master m INNER JOIN slave s ON m.id=s.master_id
	GROUP BY m.id) b
WHERE a.id=b.id
  • 1
  • 2
  • 3
  • 4
  • 5

要点在于 string_agg(),group by

3、结果
在这里插入图片描述

使用系统函数,可以使代码简洁,减少开发量;更重要的是,系统函数很有可能做了针对性优化,或者算法十分讲究,速度比我们自己处理要快,性能更好。所以,有系统函数可以用,首选使用。

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载