SQL取值到另外个表匹配

我现在有A和B表,本来是一对多的关系,但被设计成了,如果B表里的数据包含了多个A表的数据,是保存到一个字段内的,而且是以逗号隔开的;如:A的是数据是1、2、3、4、5、6、7、8等,B表里面的数据是有一个字段保存的A表的 1,2,3,第2条数据的这个字段是4,5,6,第3条数据的这个字段是7,8, 现在要做的是取出B表的数据,到A表里面去匹配,也就是B里面的每一条数据取出这个字段里面的没个逗号前的数据都要去A表里面匹配。
我的问题是,B表里面的没条数据的y字段里面的记录是A表的多条记录,把A表的ID 1、2、3等等保存到B表的y字段里面的,现在要取出B表的y字段逗号前面的每一个去A表里面找。。。

我用的是oracle charindex是不行的
你这个可以查询出来了,这个还有个要求,就是查询不相等的呢?用哪个函
对不起,是我的问题还没说清楚,因为我这里的B表里面的一条数据的一个字段有1、2、3;但另外又部分的数据里面就只有4;用你说的这个就只能查询出来有逗号分隔的,只有单个的,就没法查询出来
最新回答
青青草原杠把子

2024-10-31 12:39:28

select t1.*
from A表 t1, B表 t2
where charindex(','+t1.那个字段+',',','+t2.那个字段)>0

我的问题是,B表里面的没条数据的y字段里面的记录是A表的多条记录,把A表的ID 1、2、3等等保存到B表的y字段里面的,现在要取出B表的y字段逗号前面的每一个去A表里面找。。。
------------------------
你的意思就是根据B表的y字段的各个,分割的值去查找A表里面对应的记录并显示吧?
如果是这样的话,那用我上面的语句就可以了(对SQL SERVER来说)

我用的是oracle charindex是不行的
---------------------
那用instr函数一样效果的:
select t1.*
from A表 t1, B表 t2
where instr(','||t2.那个字段,','||t1.那个字段||',')>0

你这个可以查询出来了,这个还有个要求,就是查询不相等的呢?用哪个函数?
---------------------------
直接将上面的">0" 改为"=0"不就可以了吗
龙卷风

2024-10-31 13:06:12

select * from a b where a.x = wmsys.wm_concat(b.y) and q.id=b.id

参考着看.
璎婲

2024-10-31 13:23:09

这样可以取出来所有的B表数据并且可以和A表对应,假设B表的1,2,3字段名字为Des

SELECT LEFT(des, 1) First FROM TAB UNION ALL
SELECT SUBSTR(des,3, 1) Middle FROM TAB UNION ALL
SELECT RIGHT(des, 1) Last FROM TAB
EXCEPT SELECT RIGHT(DES, 1) FROM TAB
WHERE RIGHT(DES, 1) = '' OR SUBSTR(Des, 3, 1) = ' '
Order by 1
后面你知道怎么做的啦。。。