求sql语句写法

无爱大叔 2014-03-22 11:59:01
a表
aid (int型)
34
35
36

b表
bid aid(varchar2(50))
1 34
2 34,35
3 36

想求出b表的aid字段对应a表的aid,已知b表中每条aid只对应a表中的一条记录,如下sql会报无效数字的错误:
select b.*, (select distinct aid from a where a.aid in (b.aid)) from b
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
流浪川 2014-03-22
  • 打赏
  • 举报
回复
引用 楼主 xhbmj 的回复:
a表 aid (int型) 34 35 36 b表 bid aid(varchar2(50)) 1 34 2 34,35 3 36 想求出b表的aid字段对应a表的aid,已知b表中每条aid只对应a表中的一条记录,如下sql会报无效数字的错误: select b.*, (select distinct aid from a where a.aid in (b.aid)) from b
无效数字是因为,你a表定义的是数字,当你in b表的时候,默认需要将b.aid转换为数字,所以报错,因为34,35无法转换为数字。 如果你想用子查询的话最好使用like..
SELECT b.*,(SELECT a.aid from a where b.aid LIKE '%' || a.aid || '%' AND ROWNUM=1)  FROM b 
或者
SELECT b.*,(SELECT wmsys.wm_concat(a.aid) from a where b.aid LIKE '%' || a.aid || '%' )  FROM b 
无爱大叔 2014-03-22
  • 打赏
  • 举报
回复
用这个解决了:instr(','||b.aid||',', ','||aid||',')>0

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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