请教一下,这种 sql 怎么写

2020-05-14 09:45:33 +08:00
 NoKey

数据库是 oracle

我从一个表里查处的数据类似于 1,2,3

然后,这个是另外一个数据表的 id,我想把这个结果放到 in 里面,这样查出 id 对应的数据信息。

大概就是 select * from a where id in (select ids from b)

但是我不知道怎么把结果放到 in 里

求大佬指教,谢谢。

2277 次点击
所在节点    程序员
15 条回复
getui163
2020-05-14 09:57:06 +08:00
你这个 1,2,3 如果是多行的,你这个写法完全 OK 啊
或者 join 也行

如果这个数据是单行的某列,想按逗号拆分,看下 REGEXP_SUBSTR 这个函数
RSDTE
2020-05-14 09:57:45 +08:00
SELECT * FROM a c WHERE EXISTS( SELECT id FROM b o WHERE o.id=c.id)

这个意思?
liuhuan475
2020-05-14 09:59:48 +08:00
多列?用 union all
Johnny168
2020-05-14 10:10:05 +08:00
是想把数据字段( 1,2,3 ),拆成'1','2','3' 三个 ID 的意思吗?
xuanbg
2020-05-14 10:13:09 +08:00
楼主的意思大概是 A 表的某些 id 存在 B 表的某个字段,以逗号分隔。然后根据这个字段查询 A 表的记录。

直接 in 是不行的,要用函数处理一下,具体的做法可以百度。
RJH
2020-05-14 10:13:42 +08:00
oracle 有个 FIND_IN_SET 函数,你可以看看是否满足你的需求
sh0214
2020-05-14 10:36:35 +08:00
把 b 表的结果用字段存起来然后做拼接?
c6h6benzene
2020-05-14 13:34:49 +08:00
新的 SQL SERVER 有 split_string 函数
NoKey
2020-05-14 14:49:02 +08:00
@getui163 谢谢,就是一个字段,里面存的是 1,2,3
NoKey
2020-05-14 14:49:37 +08:00
@Johnny168 是的,查出来是 1,2,3 想直接放到 in 里面
NoKey
2020-05-14 14:50:09 +08:00
@xuanbg 谢谢,是这个意思,一个字段就是 1,2,3 这样的字符串
PopRain
2020-05-14 14:57:34 +08:00
我猜 SQL SERVER 可以这么写
select * from a inner join b on (b.ids like a.id+',%' or b.ids like ','+a.id+'%')

id 不能又包含关系 1,11,111 不行
CRVV
2020-05-14 15:34:30 +08:00
都用上 oracle 这么高级的数据库了,请正经地设计一下表。不要用这种奇怪的方式来储存一对多或者多对多的数据。

一定要这么查的话,用 PostgreSQL 是这么写的
with a(id, v) as (values (1,'a'), (2,'b'), (3,'c')), b(id,ids) as (values (8, '1,3,4'), (9,'2,5,8'))
SELECT * from b
cross join regexp_split_to_table(ids, ',') as aids(aid)
inner join a on a.id = aids.aid::int
where b.id = 8;
NoKey
2020-05-18 10:57:23 +08:00
@RJH 我百度了一下,FIND_IN_SET 说是 msyql 的
RJH
2020-05-18 11:49:15 +08:00
@NoKey 哦哦,那应该是我记错了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671477

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX