求助,SQL查询中 LEFT JOIN 中On后用In表中字段

ferdinand016 2016-02-17 03:06:10
假设A表有一个segmen1t列:
segment1
'a1','a2','a3'

B表中有一segment2列:
segment2
a1
a2
a3
a4

希望打到下面效果:

SELECT *
FROM A
LEFT JOIN B ON B.segment2 IN A.segment1


既希望查询到B表中segment2在A表segment1中存在的行

感谢。
...全文
1578 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginnnnnnnn 2016-02-17
  • 打赏
  • 举报
回复
注意字符里面的单引号的转义
SELECT *
FROM A
LEFT JOIN B ON CHARINDEX(','''+B.segment2+''',', ','+A.segment1+',')>0
ferdinand016 2016-02-17
  • 打赏
  • 举报
回复
引用 3 楼 ch21st 的回复:
[quote=引用 2 楼 ferdinand016 的回复:] [quote=引用 1 楼 ch21st 的回复:]

SELECT *
FROM A
LEFT JOIN B ON CHARINDEX(','+B.segment2+',', ','+A.segment1+',')>0
感谢~ 我想到可以用like 来实现, 如果用Like和CHARINDEX这两个哪个效率高一点呢?[/quote] 也可以但是你要考虑到一些个别情况是否会出现,如:在'15,20,100'中匹配1或者10,如果你直接用‘10’去匹配或like '%10%' 那么100也会匹配上,所以我上面写的例子在首尾都加上逗号,当然like这样处理也行[/quote] 嗯。谢谢~麻烦啦
道素 2016-02-17
  • 打赏
  • 举报
回复
引用 2 楼 ferdinand016 的回复:
[quote=引用 1 楼 ch21st 的回复:]

SELECT *
FROM A
LEFT JOIN B ON CHARINDEX(','+B.segment2+',', ','+A.segment1+',')>0
感谢~ 我想到可以用like 来实现, 如果用Like和CHARINDEX这两个哪个效率高一点呢?[/quote] 也可以但是你要考虑到一些个别情况是否会出现,如:在'15,20,100'中匹配1或者10,如果你直接用‘10’去匹配或like '%10%' 那么100也会匹配上,所以我上面写的例子在首尾都加上逗号,当然like这样处理也行
ferdinand016 2016-02-17
  • 打赏
  • 举报
回复
引用 1 楼 ch21st 的回复:

SELECT *
FROM A
LEFT JOIN B ON CHARINDEX(','+B.segment2+',', ','+A.segment1+',')>0
感谢~ 我想到可以用like 来实现, 如果用Like和CHARINDEX这两个哪个效率高一点呢?
道素 2016-02-17
  • 打赏
  • 举报
回复

SELECT *
FROM A
LEFT JOIN B ON CHARINDEX(','+B.segment2+',', ','+A.segment1+',')>0

22,210

社区成员

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

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