我有很多文本数据,我必须将其用作从数据库返回其他数据的键。问题是其中一些键不存在。他们查询我正在寻找应该为他们返回空行
select column1, column2,column3 from mobilenumbers where mobile_number in ('123456789','123456798');
到目前为止,我找到的唯一方法是使用右外连接,但是只能在两个表上工作,我有一个表和文本数据作为键。
在有人要求之前......我无法创建一个表来存放这些数据。
如果有帮助,这是一个oracle 10g数据库。
答案 0 :(得分:3)
你可以这样做。
首先,获得您所选择的公共场所......通常会有很多关于。
--pick a public VARRAY.
select owner, type_name from all_Coll_types where coll_type = 'VARYING ARRAY'
and elem_type_name = 'VARCHAR2' ;
然后选择保持IN列表的顺序:
with numbers as (select /*+ cardinality(t, 10) */ rownum r, t.column_value pnumber
from table(sys.dbmsoutput_linesarray('030390483', '089847547', '0347839874', '020983438')) t
)
select n.pnumber, m.mobile_number
from numbers n
left outer join mobilenumbers m
on n.pnumber = m.mobile_number
order by n.r;
答案 1 :(得分:0)
这很难看但你可以尝试:
SELECT column1, column2, column3
FROM (SELECT 1 FROM DUAL) x
LEFT OUTER JOIN mobilenumbers ON mobile_number = '123456789'
UNION ALL
SELECT column1, column2, column3
FROM (SELECT 1 FROM DUAL) x
LEFT OUTER JOIN mobilenumbers ON mobile_number = '123456798'
或者,你可以使用这个技巧,但它可能无法保持你指定数字的顺序:
SELECT column1, column2, column3
FROM TABLE(sys.odcivarchar2list('123456789','123456798')) x
LEFT OUTER JOIN mobilenumbers m ON x.COLUMN_VALUE = m.mobile_number