sqlserver数据库判断包含关系

孟德三笑 2018-03-29 08:51:47
如图,A表与B表的第一列对应,如何查出A表第二列没有被B表第二列包含的第一列的值。
...全文
683 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2018-03-30
  • 打赏
  • 举报
回复
加','是为了以‘,sz,’这样作为一个整体去匹配,否则会认为‘sz’包含在‘szx,gz’里的,和你的初衷就不一样了。
xiaocongzhi 2018-03-30
  • 打赏
  • 举报
回复
select * from a join b on a.col1=b.col1 and (not b.col2 like '%'+a.col2+'%')
二月十六 2018-03-30
  • 打赏
  • 举报
回复
引用 3 楼 qq_25186987 的回复:
[quote=引用 2 楼 sinat_28984567 的回复:]
--测试数据
if not object_id(N'Tempdb..#A') is null
	drop table #A
Go
Create table #A([COL1] nvarchar(21),[COL2] nvarchar(22))
Insert #A
select N'a',N'sz' union all
select N'd',N'gz'
GO
if not object_id(N'Tempdb..#B') is null
	drop table #B
Go
Create table #B([COL1] nvarchar(21),[COL2] nvarchar(25))
Insert #B
select N'a',N'sz,gz' union all
select N'd',N'sz,ah'
Go
--测试数据结束
SELECT  *
FROM    #A
WHERE   NOT EXISTS ( SELECT *
                     FROM   #B
                     WHERE  CHARINDEX(',' + #A.COL2 + ',', ',' + #B.COL2 + ',') > 0
                            AND COL1 = #A.COL1 )
CHARINDEX(',' + #A.COL2 + ',', ',' + #B.COL2 + ',')可以解释一下这里为什么要加','这个符号吗[/quote] 4#说的对
孟德三笑 2018-03-29
  • 打赏
  • 举报
回复
引用 2 楼 sinat_28984567 的回复:
--测试数据
if not object_id(N'Tempdb..#A') is null
	drop table #A
Go
Create table #A([COL1] nvarchar(21),[COL2] nvarchar(22))
Insert #A
select N'a',N'sz' union all
select N'd',N'gz'
GO
if not object_id(N'Tempdb..#B') is null
	drop table #B
Go
Create table #B([COL1] nvarchar(21),[COL2] nvarchar(25))
Insert #B
select N'a',N'sz,gz' union all
select N'd',N'sz,ah'
Go
--测试数据结束
SELECT  *
FROM    #A
WHERE   NOT EXISTS ( SELECT *
                     FROM   #B
                     WHERE  CHARINDEX(',' + #A.COL2 + ',', ',' + #B.COL2 + ',') > 0
                            AND COL1 = #A.COL1 )
CHARINDEX(',' + #A.COL2 + ',', ',' + #B.COL2 + ',')可以解释一下这里为什么要加','这个符号吗
二月十六 2018-03-29
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A') is null
drop table #A
Go
Create table #A([COL1] nvarchar(21),[COL2] nvarchar(22))
Insert #A
select N'a',N'sz' union all
select N'd',N'gz'
GO
if not object_id(N'Tempdb..#B') is null
drop table #B
Go
Create table #B([COL1] nvarchar(21),[COL2] nvarchar(25))
Insert #B
select N'a',N'sz,gz' union all
select N'd',N'sz,ah'
Go
--测试数据结束
SELECT *
FROM #A
WHERE NOT EXISTS ( SELECT *
FROM #B
WHERE CHARINDEX(',' + #A.COL2 + ',', ',' + #B.COL2 + ',') > 0
AND COL1 = #A.COL1 )


Foliole 2018-03-29
  • 打赏
  • 举报
回复
建一个拆字符串的函数,然后对应left join查出来

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧