数据库是 oracle
我从一个表里查处的数据类似于 1,2,3
然后,这个是另外一个数据表的 id,我想把这个结果放到 in 里面,这样查出 id 对应的数据信息。
大概就是 select * from a where id in (select ids from b)
但是我不知道怎么把结果放到 in 里
求大佬指教,谢谢。
1
getui163 2020-05-14 09:57:06 +08:00
你这个 1,2,3 如果是多行的,你这个写法完全 OK 啊
或者 join 也行 如果这个数据是单行的某列,想按逗号拆分,看下 REGEXP_SUBSTR 这个函数 |
2
RSDTE 2020-05-14 09:57:45 +08:00
|
3
liuhuan475 2020-05-14 09:59:48 +08:00
多列?用 union all
|
4
Johnny168 2020-05-14 10:10:05 +08:00
是想把数据字段( 1,2,3 ),拆成'1','2','3' 三个 ID 的意思吗?
|
5
xuanbg 2020-05-14 10:13:09 +08:00
楼主的意思大概是 A 表的某些 id 存在 B 表的某个字段,以逗号分隔。然后根据这个字段查询 A 表的记录。
直接 in 是不行的,要用函数处理一下,具体的做法可以百度。 |
6
RJH 2020-05-14 10:13:42 +08:00
oracle 有个 FIND_IN_SET 函数,你可以看看是否满足你的需求
|
7
sh0214 2020-05-14 10:36:35 +08:00
把 b 表的结果用字段存起来然后做拼接?
|
8
c6h6benzene 2020-05-14 13:34:49 +08:00 via iPhone
新的 SQL SERVER 有 split_string 函数
|
12
PopRain 2020-05-14 14:57:34 +08:00
|
13
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; |