表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 用逗号隔开 的语句
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
这是什么鬼设计
参考一下:https://www.cnblogs.com/WangShuaishuai/p/9022952.html
select Group_concat(b.name) from B b where concat(',',id,',') like concat(',',(select a.tag_id from A a where a.id=1),',') 试一试
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
这个查询结果还是只有第一个不是全部
@屈新: 不明白你的需求,你不就是要查询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
查出来
本来也想写写,看到上面的已经没有写的欲望了
不用想那么复杂 in 的后面是(1,2,3) a表中的tag_id刚好差两个括号,所以你就想怎么加上这两个
表设计有问题啊
一对多的关系,最好用几条记录保存
FIND_IN_SET()
– 玄月是个菜鸟 6年前