1

データベースから他のデータを返すためのキーとして使用する必要があるテキスト データが多数あります。問題は、それらのキーの一部が存在しないことです。私が探しているクエリは、空の行を返す必要があります

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

これまでのところ、私が見つけた唯一の方法は右外部結合を使用することですが、それは 2 つのテーブルでしか機能しません。キーとして 1 つのテーブルとテキスト データがあります。

そして、誰かが尋ねる前に...このデータを入れるテーブルを作成できません。

それが役立つ場合、これは oracle 10g データベースです。

4

2 に答える 2

3

あなたはこれを行うことができます。

まず、選択したパブリックvarrrayを取得します。通常はかなりの数があります。

--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 に答える