选择行并在where子句中保持文本顺序

时间:2013-02-22 04:57:54

标签: sql oracle10g

我有很多文本数据,我必须将其用作从数据库返回其他数据的键。问题是其中一些键不存在。他们查询我正在寻找应该为他们返回空行

select column1, column2,column3 from mobilenumbers where mobile_number in ('123456789','123456798');

到目前为止,我找到的唯一方法是使用右外连接,但是只能在两个表上工作,我有一个表和文本数据作为键。

在有人要求之前......我无法创建一个表来存放这些数据。

如果有帮助,这是一个oracle 10g数据库。

2 个答案:

答案 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;

例如:http://sqlfiddle.com/#!4/9da70/1

答案 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'

SQL Fiddle example

或者,你可以使用这个技巧,但它可能无法保持你指定数字的顺序:

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 example