StackTc
2018-03-29 02:27
采纳率: 61.9%
浏览 965

sql问题求大神解题 急急急

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

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

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • icyxing 2018-03-29 03:35
    已采纳

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

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

    打赏 评论
  • mango_love 2018-03-29 02:38

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

    打赏 评论
  • 瀨皮 2018-03-29 02:49

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

    打赏 评论
  • qq_37030929 2018-03-29 03:41

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

    打赏 评论
  • antjl 2018-03-29 03:51

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

    打赏 评论
  • antjl 2018-03-29 03:52

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

    打赏 评论
  • 神秘的黄瓜 2018-03-29 04:06

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

    打赏 评论
  • 神秘的黄瓜 2018-03-29 05:55

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

    打赏 评论
  • u011118402 2018-03-29 06:55

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

    打赏 评论
  • wandeqiao 2018-03-29 08:15

    表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

    打赏 评论
  • qq_30600047 2018-03-29 10:03

    用REGEXP, 比如
    SELECT * FROM B b WHERE CONCAT(';',b.objid ,';') REGEXP (CONCAT(';',REPLACE('1,2,4',',',';|;'),';'));

    如果需要连接的,自行连接也是一样的!!!!!!

    用的舒服的话给个分呗!!!

    打赏 评论
  • antjl 2018-03-30 08:28

    楼主是用的 MS SQL吧,那应该用我之前5楼给的语句就行:Select * From 表A,表B Where CharIndex(','+Cast(表B.objid As VarChar(50))+',',','+表A.refobjid+',')>0

    打赏 评论

相关推荐 更多相似问题