sql问题求大神解题 急急急

表A有一个字段是refobjid 里面 存的是objid 以逗号隔开,比如1,2,4
表B存的是对象 其中有objid 跟表A的refobjid关联,

现在想通过表A的objid查到 refobjid 然后查出 表B中的 几个对象,求解,
用in函数不行 因为 refobjid查出来的是字符串 不是数组。

sql
0

12个回答

标准SQL结局不了你的问题,考虑可移植性的话你需要分拆为两次进行查询

否则可以考虑使用数据库特性
如MySQL的find_in_set,参考@kony1314的回复

0
icyxing
icyxing 回复chenmin772868766: 这种是可以的,但不是标准SQL,各数据库支持方式不一样。为啥给我回复?我不是题主
一年多之前 回复
chenmin772868766
chenmin772868766 表A中的refobjid 用逗号分隔,然后再行转列,就可以和B表关联了。 eg:col1,refobjid 1, 1,2,4 2, 3,5,6 行转列之后为: col1,refobjid 1, 1 1, 2 1, 4 2, 3 2, 5 2, 6
一年多之前 回复
icyxing
icyxing 回复qq_41920997: like是不行的因为他的ID是数字 A.refobjid = 11,12,13 B.id= 1,like也会成功会出现错误的结果
一年多之前 回复
shuige_2014
shuige_2014 从A表查出refobjid后,使用 select * from B where find_in_set(objid,refobjid);
一年多之前 回复
qq_41920997
qq_41920997 select * from B inner join A on A.refobjid like B.id where A.id=?
一年多之前 回复
wgl569849449
wgl569849449 先把A表用行转列函数转化,在用结果去关联B表,试试看
一年多之前 回复
icyxing
icyxing 结局==解决
一年多之前 回复

https://blog.csdn.net/mango_love/article/details/51222512
你用这个代码,新建一个函数,然后查询的时候调用这个函数ab表关联试试

2

从A表查出refobjid后,使用
select * from B where find_in_set(objid,refobjid);

0

你需要分多次查询,第一次用表A的objId查出相应的refobjid ,用String.split函数用逗号作为separator将“1,2,4”分割成数组,再使用in查询

0

Select * From 表A,表B Where CharIndex(','+Cast(表B.objid As VarChar(50))+',',','+表A.refobjid+',')>0

0
antjl
antjl 楼主,你试过我给你的语句没?我建立表测试过的,很简单的语句。
一年多之前 回复

我测试过,是可以查出结果。只是灵活运用CharIndex函数而已。

0

select * from B inner join A on A.refobjid like B.id where A.id=?

0

like后面用sql拼接函数,前后加个%号

0

用like % 模糊查询匹配应该可以

0
antjl
antjl 回复StackTc: 我的语句呢: Select * From 表A,表B Where CharIndex(','+Cast(表B.objid As VarChar(50))+',',','+表A.refobjid+',')>0
一年多之前 回复
StackTc
StackTc like不行 如果 1 跟 115 那么 也会进去
一年多之前 回复

表A中的refobjid 用逗号分隔,然后再行转列,就可以和B表关联了。
eg:col1,refobjid
1, 1,2,4
2, 3,5,6
行转列之后为:
col1,refobjid
1, 1
1, 2
1, 4
2, 3
2, 5
2, 6

0
共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!