相关文章推荐
酷酷的熊猫  ·  Django ORM ...·  2 周前    · 
善良的莴苣  ·  AzureSqlDatabaseDataSo ...·  1 年前    · 
很拉风的山羊  ·  delete 运算符 (C++) | ...·  1 年前    · 
强悍的海龟  ·  bootstrap datepicker ...·  1 年前    · 

作者目前是这么理解这个问题,如果有更好的想法,可在评论区留言。对于合并,要么是子连接(相对于一张表),又或者是多张表(可使用左连接或者右连接),当然这很常用。所以在使用前,必须先搞懂左右连接以及自连接,这样才能更简单理解。那我们开始,如上想要将id相同的字段合并,怎么合并?合并之后又是为了得到什么样的结果?为什么要用这个?三个问题,首先来说第二个,如果只涉及一张表,那就是减少冗余的字段,并将相同的字段(例如:N个id相等)下的某个字段进行拼接,使之看似是一个数组,实则就是一个字段中有多条数据,只不过中间看用什么连接(例如:什么标点符号),多表之间同样也可以这么理解,大概的理解就这么多了,具体还是得看项目中的需求。正所谓,需求看着看着逻辑慢慢就出来了。让我们来看看基于不同数据库之间的字段拼接方法

基于sql server:

 select name,
        stuff((select ','+PatrolContent  from  ss_SPRD
 where 
 		c.ID=ID  for xml path('')),1,1,'') as PatrolContentNew  
 		ss_SPRD  a   
 group by  
 		a.ss_SPRD  
   ..............
   (其中若sql server中报出某处"."附近有语法错误或者是关键字"for"附近有语法错误,有这个错误直接
   删除for xml path(''))

其中这个里面涉及到了sql server 中的stuff函数
STUFF ( character_expression , start , length ,character_expression )
它的作用是:删除指定长度的字符,并在指定的起点处插入另一组字符
其中里面各个参数的含义分别是:
参数——character_expression ——(一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列)
start——(一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。start 可以是 bigint 类型)

length ——(一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 bigint 类型)

返回类型——(如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据)

sql server目前只了解到了这一个函数

mysql

对于mysql因这次没有没到,为了下次方便这里附上一段一位csdn笔者的mysq拼接内容
1.符号 +
在MySQL中也支持使用加号拼接结果,但是它的运行结果与MySQL中的运行结果有所不同。在两个字段都是整型时,MySQL与Sql Server运行结果相同,都会返回两个整型值得和,但是在两个字段中有一个为字符串时,MySQL的返回结果不是拼接两字符串,而是默认字符串为零,再返回两个字段之和

//返回90
select Name + Score1 where ID = 1 ;

如上所示,因为Name字段不是整型,所以相当于Score1 + 0,所以返回值就是Score1的值,即90;另外,如果相加的两个字段全都是字符串,则返回0。

2.CONCAT
CONTACT的功能是直接将数据按照字符串格式拼接,类似于Sql Server中加号拼接字符串的功能。

//与Sql Server中的"+"类似
select CONCAT(ID,Name,Score1) from MyTable where ID = 1;
//返回值为 1A90;

在这里需要注意的是,CONCAT后面括号中的参数只要有一个值为null,整个函数的返回值就会为null。

3.CONCAT_WS
CONOCAT_WS的用法和前者类似,但是它的第一个参数为分隔符,在返回的值中,每一个参数之间都会有第一个参数作为分隔。

select CONCAT_WS('-',ID,Name,Score1) from MyTable where ID = 1;
//返回值为 1-A-90;

如果CONCAT_WS的第一个参数为null,则返回值为null,如果后面的参数中有null,则这些参数会被忽略,只返回其他参数和分隔符组成的字符串。
4.根据字段拼接 GROUP_CONTACT
在我们使用数据库时,会碰到这样一种情况:同一个Name的人有两条数据,但是他们的其他数据并不相同,而我们所需要的是同一个Name的人的Score1集合,即需要获得Name为A的所有的Score1并且希望将其拼接为一个字段,这里我们就需要用到GROUP_CONCAT。

函数语法如下:group_concat( 要连接的字段 )  [Order BY 排序字段 ASC/DESC]   [Separator '分隔符']
select Name,GROUP_CONCAT(Score1 Separator '-') FROM MyTable GROUP BY Name;

其中GROUP BY 后面的字段是Name,所有同一排序字段的数据会被拼接后存入同一字段中,并以相应的分隔符分分隔。

后面再添加一个5.字段后加上 ||

select id, sex||‘abc' from user

注意:每一个数据库所拥有的函数不一样,什么数据库应对应什么函数,不要跳跃的去用

前言作者目前是这么理解这个问题,如果有更好的想法,可在评论区留言。对于合并,要么是子连接(相对于一张表),又或者是多张表(可使用左连接或者右连接),当然这很常用。所以在使用前,必须先搞懂左右连接以及自连接,这样才能更简单理解。那我们开始,如上想id相同的字段合并,怎么合并?合并之后又是为了得到什么样的结果?为什么要用这个?三个问题,首先来说第二个,如果只涉及一张表,那就是减少沉余的字段,并将相同的字段(例如:N个id相等)下的某个字段进行拼接,使之看似是一个数组,实则就是一个字段中有多条数据,只不过中间看
假设两个表a,b,b中通过字段id与a表关联,a表与b表为一对多的关系。假设b表中存在一字段name,现需要查询a表中的记录,同时获取存储在b表中的name信息,按照常规查询,b表中有多少记录,则会显示多少行,如果需要只显示a表记录行数,则需要把查询name字段得到的多行记录进行合并,可以通过程序实现,但也可直接在sql层完成。 利用group_concat()方法,参数为需要合并字段合并字段分隔符默认为逗号,可通过参数separator指定,该方法往往配合group by 一起使用。 select a.*,group_concat(b.name separator '
我想要将两者的数据进行合并达到如下的效果: 这里限制条件有两个分别是date,code 两个,只有当两者都对应上才能达到我想要的效果。于是我绞尽脑汁也想不出来该如何去解决问题。 于是乎,我又重新回到了起点。(我跑去看菜鸟教程了) 可能是我原来没仔细看吧,终于让我发现了一个解决问题的方式,果然回归原始的基础,还是能解决很多问题的。 我先把table1的所有数据和tab
在查询语句编写过程中,常常会遇到将ID相同的几个字段合并到一个字段的情况,今天就给大家分享在SQL Server中的字段进行合并的操作。 我们以合并打卡记录的例子来说明怎么合并。 我们来看下面两个截图,图一是原始的打卡记录表,EmpID表示员工的ID,该表记录了每个员工每次打卡的时间。每打一次卡就生成一行记录。 这样在展示的时候是不好看的,变成图二那样的格式就好看了,每个员工每一天的
select a.SUPPLIER_USER_ID,GROUP_CONCAT(d.ITEM_NAME) AS countyName from p_supplier_user a LEFT JOIN t_dictitem d on FIND_IN_SET(d.ITEM_ID , a.COUNTY) GROUP BY a.SUPPLIER_USER_ID
select account_id, substring_index(substring_index(a.related_shop_ids,',' ,b.help_topic_id+1),',',-1) shopid sales_hang_account a mysql.help_topic b on b.help_topic_id < (length(a.related_shop_ids) - length(replace(a.related_shop_ids,',',''))+1 select distinct(substring_index(substring_index(a.col,',',b.help_topic_id+1),',',-1)) (select group_concat( SELECT STUFF((SELECT ','+name FROM Test WHERE id=T.id FOR XML PATH('')),1,1,'') AS 别名 FROM Test T GROUP BY T.id
您好,可以使用 MySQL 中的 FIND_IN_SET 函数来实现根据逗号隔开后的条件筛选数据。例如,假设字段名为 field1,要筛选包含值为 "value1" 的数据,可以使用以下 SQL 语句: SELECT * FROM table1 WHERE FIND_IN_SET('value1', field1) > ; 其中,table1 是表名,* 表示返回所有字段,WHERE 子句中的 FIND_IN_SET 函数会返回包含值为 "value1" 的数据的行数,如果大于 ,则表示该行数据符合条件。