我有很多文本数据,必须将它们用作从数据库返回其他数据的键。问题是其中一些钥匙不存在。他们查询我正在寻找应该为他们返回空行
select column1, column2,column3 from mobilenumbers where mobile_number in ('123456789','123456798');
到目前为止,我找到的唯一方法是使用右外联接,但它只适用于两个表,我有一个表和文本数据作为键。
在有人问之前。。。我无法创建一个表来放入这些数据。
如果有帮助的话,这是一个oracle10g数据库。
您可以做到这一点。
首先,获取您选择的公共数组。。通常有不少关于。
--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;
例如:http://sqlfiddle.com/#!4/9da70/1
这很难看,但您可以尝试:
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'
SQL Fiddle示例
或者,你可以使用这个技巧,但它可能无法维持你在中指定的数字顺序
SELECT column1, column2, column3
FROM TABLE(sys.odcivarchar2list('123456789','123456798')) x
LEFT OUTER JOIN mobilenumbers m ON x.COLUMN_VALUE = m.mobile_number
SQL Fiddle示例