首页 新闻 会员 周边 捐助

这个sql怎么写

0
悬赏园豆:80 [已解决问题] 解决于 2018-07-24 10:54

表a
id      tag_id
1        1,2,5
2        2,3, 5 
3        1,4

表b
id      name
1       张三 
2       李四
3       王五
4       齐六
5       王八
其中表a的tag_id =表b的id
sql  查询 表a  id为1的tag_id相对应的name 用逗号隔开  的语句

屈新的主页 屈新 | 初学一级 | 园豆:130
提问于:2018-07-17 15:27

FIND_IN_SET()

玄月是个菜鸟 6年前
< >
分享
最佳答案
0
SELECT TO_CHAR(WM_CONCAT(B.NAME)) NAMES
  FROM B
 WHERE INSTR(',' || (SELECT A.TAG_ID FROM A WHERE A.ID = '1') || ',', ',' || B.ID || ',') > 0;

Oracle

收获园豆:80
zhangweiwen | 小虾三级 |园豆:904 | 2018-07-17 20:53
其他回答(7)
0

这是什么鬼设计

blurs | 园豆:660 (小虾三级) | 2018-07-17 16:59
0

参考一下:https://www.cnblogs.com/WangShuaishuai/p/9022952.html

徒然喜欢你 | 园豆:1741 (小虾三级) | 2018-07-17 17:26
0

select Group_concat(b.name) from B b where concat(',',id,',') like concat(',',(select a.tag_id from  A a where a.id=1),',')  试一试

_legends | 园豆:509 (小虾三级) | 2018-07-17 17:58
0

select name from b where id in (select tag_id  from a where id=1)

或者

select name from b where charindex(','+id+',',','+(select tag_id  from a where id=1)+',')>0

周捷Jay | 园豆:225 (菜鸟二级) | 2018-07-17 18:11

这个查询结果还是只有第一个不是全部

支持(0) 反对(0) 屈新 | 园豆:130 (初学一级) | 2018-07-18 14:13

@屈新: 不明白你的需求,你不就是要查询a表id=1 的所有名字吗

select name from b where charindex(','+id+',',','+(select tag_id  from a where id=1)+',')>0

查出来

 

无非就是拼接一下

SELECT STUFF((select ','+name
from b where charindex(','+id+',',','+(select tag_id from a where id=1)+',')>0
FOR XML PATH('')),1,1,'') Name

查出来

支持(0) 反对(0) 周捷Jay | 园豆:225 (菜鸟二级) | 2018-07-18 14:33
0

本来也想写写,看到上面的已经没有写的欲望了

good_idea | 园豆:74 (初学一级) | 2018-07-18 10:28
0

不用想那么复杂  in 的后面是(1,2,3)  a表中的tag_id刚好差两个括号,所以你就想怎么加上这两个

^keepHungry$ | 园豆:516 (小虾三级) | 2018-07-18 18:46
0

表设计有问题啊

nik2011 | 园豆:213 (菜鸟二级) | 2018-07-23 11:10

一对多的关系,最好用几条记录保存

支持(0) 反对(0) nik2011 | 园豆:213 (菜鸟二级) | 2018-07-23 11:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册