sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

时间:2021-04-20 15:05:54
A表(dj_table1)
sql联合查询,如果将A表中的信息,合并到B表中一个字段显示
B表(dj_table2)  
sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

我通过语句查询
select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

得到的结果是
sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

其中红色的部分输出就出现错误了,麻烦大神们帮忙看看

其中生成表的语句:
CREATE TABLE [dbo].[dj_table1](
[ID] [int] IDENTITY(1,1) NOT NULL,
[typeID] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[supportingtypeID] [int] NULL,
 CONSTRAINT [PK_dj_table1] PRIMARY KEY CLUSTERED 
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
go
CREATE TABLE [dbo].[dj_table2](
[typeID] [int] IDENTITY(1,1) NOT NULL,
[typeName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[supportingtypeId] [int] NULL,
 CONSTRAINT [PK_dj_table2] PRIMARY KEY CLUSTERED 
(
[typeID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

7 个解决方案

#1


改成这样试试:
select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and 
charindex(','+cast(b.typeID AS nvarchar(10))+',',','+a.typeID+',')>0 
FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

#2



select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

逗号的地方注意

#3


引用 1 楼 yupeigu 的回复:
改成这样试试:
select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and 
charindex(','+cast(b.typeID AS nvarchar(10))+',',','+a.typeID+',')>0 
FOR xml path('')), 1, 1, '')
)
 from dj_table1 a
  

嘿嘿,这么写可以,谢谢

#4


其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

#5


引用 4 楼 yupeigu 的回复:
其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a


我也知道 and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'这里使用Like有问题,只要重叠的数字,都会把个位的信息也查出来,但是这种用到多个函数的时候,就容易晕了

谢谢大师的指导 sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

#6


引用 2 楼 jinfengyiye 的回复:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

逗号的地方注意


谢谢帮忙解决问题

#7


引用 5 楼 dj1990 的回复:
Quote: 引用 4 楼 yupeigu 的回复:

其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a


我也知道 and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'这里使用Like有问题,只要重叠的数字,都会把个位的信息也查出来,但是这种用到多个函数的时候,就容易晕了

谢谢大师的指导 sql联合查询,如果将A表中的信息,合并到B表中一个字段显示



呵呵,确实容易晕,不过多看看就习惯了  sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

#1


改成这样试试:
select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and 
charindex(','+cast(b.typeID AS nvarchar(10))+',',','+a.typeID+',')>0 
FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

#2



select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

逗号的地方注意

#3


引用 1 楼 yupeigu 的回复:
改成这样试试:
select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and 
charindex(','+cast(b.typeID AS nvarchar(10))+',',','+a.typeID+',')>0 
FOR xml path('')), 1, 1, '')
)
 from dj_table1 a
  

嘿嘿,这么写可以,谢谢

#4


其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

#5


引用 4 楼 yupeigu 的回复:
其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a


我也知道 and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'这里使用Like有问题,只要重叠的数字,都会把个位的信息也查出来,但是这种用到多个函数的时候,就容易晕了

谢谢大师的指导 sql联合查询,如果将A表中的信息,合并到B表中一个字段显示

#6


引用 2 楼 jinfengyiye 的回复:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID and ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a

逗号的地方注意


谢谢帮忙解决问题

#7


引用 5 楼 dj1990 的回复:
Quote: 引用 4 楼 yupeigu 的回复:

其实,你的问题在于:

and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'

当去查找2,3,11的时候,由于是直接like的,2和3没问题,但是到了11的时候,就有问题了,不仅把11的给找出来了,也把1的找出来了,因为like '%11%' ,以后找到typeID为1的。

可以采用上面的代码,也可以这样改一下:

方法2:

select *,
(stuff((SELECT ','+b.[typename] from dj_table2 b 
where b.supportingTypeID=a.supportingTypeID 
and  ','+a.typeID+',' LIKE '%,'+cast(b.typeID AS nvarchar(10))+',%' FOR xml path('')), 1, 1, '')
)
 from dj_table1 a


我也知道 and a.typeID LIKE '%'+cast(b.typeID AS nvarchar(10))+'%'这里使用Like有问题,只要重叠的数字,都会把个位的信息也查出来,但是这种用到多个函数的时候,就容易晕了

谢谢大师的指导 sql联合查询,如果将A表中的信息,合并到B表中一个字段显示



呵呵,确实容易晕,不过多看看就习惯了  sql联合查询,如果将A表中的信息,合并到B表中一个字段显示