日期:2014-05-16  浏览次数:20673 次

求sql语句写法
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表
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