1

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

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

到目前为止,我发现的唯一方法是使用右外连接,但是这只适用于两个表,我有一个表和文本数据作为键。

在有人问之前......我无法创建一个表格来放入这些数据。

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

4

2 回答 2

3

你可以这样做。

首先,获得您选择的公共 varrrray ..通常有很多。

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

于 2013-02-22T08:24:03.437 回答
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 小提琴示例

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

SELECT column1, column2, column3
FROM TABLE(sys.odcivarchar2list('123456789','123456798')) x
LEFT OUTER JOIN mobilenumbers m ON x.COLUMN_VALUE = m.mobile_number

SQL 小提琴示例

于 2013-02-22T05:09:40.283 回答