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



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

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示例

最新更新