2016-12-08 5 views
0
select * 
    from Address 
where city in ('a', 'b', 'c', 'd', 'e', 'f', ...) 

上記の結果にないクエリで指定された都市のみを取得するようにSQLを変更するにはどうすればよいですか?SQLに渡された不足しているデータを見つける

例:私は句の中の100の都市(ハードコードされています)を渡しました。渡した都市が住所表に表示されません。

+2

あなたはアドレステーブルにないIN句にリストにある都市を意味しますか?どのようにIN句の都市のリストを提供しますか?あなたはそれらをハードコードしますか(手書きで書くか)?彼らはテーブルに保管されていますか? – mathguy

+2

あなたは 'NOT IN'を使うのと同じ意味ですか? – Nicarus

+0

質問を編集しました。はい、都市はハードコードされています。 INは単に指定された都市のリストにない行を返すだけです。 – Learner

答えて

2

「ではない」あなたは都市や、その後minusオペレータのテーブルを構築するためにunionを使用することができます使用することができます。あなたが参加するかnot inまたはnot exists使用することができます

select column_value as city 
    from table(sys.odcivarchar2list('Dallas', 'Berlin', 'Cracow', 'Praha')) 
minus 
select city from address 

...、代わりにminusの:

select 'Dallas' as city from dual union all 
select 'Berlin' as city from dual union all 
select 'Cracow' as city from dual union all 
select 'Praha' as city from dual 
minus 
select city from address 

は、代わりに労働組合のあなたは、構文短縮事前に定義されたタイプodcivarchar2listを、使用することができます。


テストデータと両方のクエリの出力:

create table address (id number, city varchar2(10)); 
insert into address values (1, 'Rome'); 
insert into address values (2, 'Dallas'); 
insert into address values (3, 'Cracow'); 
insert into address values (4, 'Moscow'); 
insert into address values (5, 'Liverpool'); 
insert into address values (6, 'Cracow'); 
insert into address values (7, 'Seoul'); 

CITY 
------------ 
Berlin 
Praha 
1

あなたが指定されたリストにないすべてのアドレスを検索しているようです。あなたは

select * from Address where city not in 
('a', 
'b', 
'c', 
'd', 
'e', 
'f' 
.. 
) 
+0

このクエリはOPの要件を満たしていません。都市が提供されている都市リストにないすべての住所のリストを返すだけですが、OPは一致する住所のないすべての都市のリストを必要とします。 –

関連する問題