首页 > 解决方案 > 使用 in 子句加入 oracle 以获取列表

问题描述

我有 2 张桌子,1 张是transaction,其他的是trackingNumber

事务具有trackingNumberList其中包含的值,如123, 235, 55. 这 123idof trackingNumber,其他 2 个值相同。

我想用 trackingNumber 加入交易,但我没有找到任何加入列表的解决方案。

我也试过INSTR了,但它没有给出正确的数据。

select tn.*, t.id
from  transaction t
left join TrackingNumber tn on INSTR(t.trackingnumberlist, tn.id)  > 0
where t.id = 2439845;

我正在使用 ORACLE 数据库。

标签: oracle

解决方案


不要拆分字符串;只需将列表和 id 包装在您正在使用的分隔符中,并使用以下方法进行子字符串匹配LIKE

select tn.*, t.id
from   transaction t
       left join TrackingNumber tn
       on (', '||t.trackingnumberlist||', ' LIKE '%, '||tn.id||', %')
where  t.id = 2439845;

如果你想用INSTR做同样的事情:

select tn.*, t.id
from   transaction t
       left join TrackingNumber tn
       on (INSTR(', '||t.trackingnumberlist||', ', ', '||tn.id||', ') > 0)
where  t.id = 2439845;

推荐阅读