5

私はプロジェクトに取り組んでおり、確認が必要な数千件のレコードのリストがあります。見つからないもののリストを提供し、それらを見つけるために使用するクエリを提供して、上司が彼らの仕事をチェックできるようにする必要があります。

私はSQLに比較的慣れていないことを認めます。一時テーブルを作成するアクセス権がありません。これは、これを行うために考えていた方法の 1 つです。

私がやっていることの基本的な考え方:

select t.column1, t.column2
from table1 t
where t.column1 in ('value1','value2','value3')

value1 と value3 がデータベースにあり、value2 がデータベースにない場合、value2 を表示する必要がありますが、その他は表示しません。

ISNULLクエリを埋め込み、クエリNOTから値 を選択しようとしました。

Google およびこのサイトのクエリで見つからない戻りレコードを検索しましたが、まだ何も見つかりませんでした。

4

3 に答える 3

2

私は似たようなことを試しました:

まず、必要なすべての値を含むテーブルを作成します。

まあ言ってみれば

create table table_values(values varchar2(30));

次に、以下の in 句を試してください。

select * from table_values tv where tv.value not in (select t.column1
from table1 t);

これにより、必要な値が返されます。

于 2012-11-07T19:14:12.010 に答える
1

ソリューションは、デュアルが単一行単一列テーブルであるOracleで機能する可能性があります。必要な値を仮想的に選択できるテーブルが1つ必要です。

警告データベースにアクセスできないため、以下のクエリをテストしたことはありません。

SELECT tab_all.col_search, t.column1, t.column2
FROM
(
   Select value1 AS col_search from dual
   union all
   Select value2 from dual
   union all
   Select value3 from dual
) tab_all left join  table1 t
on col_search = t.column1
WHERE t.column1 is null;

私は、OracleのSELECT value1FROMdualに相当するsqlserverはSELECTvalue1ORSELECT'value1'であると信じています。

だから試してみてください

SELECT tab_all.col_search, t.column1, t.column2
FROM
(
   Select value1 AS col_search
   union all
   Select value2 AS col_search
   union all
   Select value3 AS col_search
) tab_all left join  table1 t
on col_search = t.column1
WHERE t.column1 is null;

私はsqlserverではないので、RichardTheKiwiバージョンのOracleのデュアルからの選択の方が優れている可能性があります。

于 2012-11-07T19:06:25.763 に答える
1

SQL Server 2008 では、次の構文を使用して派生テーブルを作成できますVALUES(...)(...)(...)

    select v.value
      from (
           values ('value1'),('value2'),('value3')
           ) v(value)
 left join table1 t on t.column1 = v.value
     where t1.column1 is null

ノート:

  1. VALUES の後の各 (...) は 1 つの行であり、複数の列を持つことができます。
  2. 派生テーブルのv(value)後の は、テーブルに付けられたエイリアスと列名です。
  3. vLEFT JOIN は、レコードが table1 に存在しない場合でも、派生テーブルの値を保持します
  4. 次に、一致しないレコードのみを保持します。つまり、t1.column1 is null
  5. 選択した最初の列を からの列に切り替えましたv。column2 は常に null であるため削除されます
于 2012-11-07T20:29:54.377 に答える