2012-11-07 16 views
5

私はプロジェクトに取り掛かりました。私はチェックが必要な数千のレコードのリストを持っています。見つからないもののリストを提供し、上司が自分の仕事を確認できるように私がそれらを見つけるのに使う質問を提供する必要があります。クエリで戻り値が見つかりません

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

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

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

をvalue1と値3がデータベース内にありますが、値2ではない場合、私はVALUE2ではなく他人を表示する必要があります。

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

私は、Googleとこのサイトのクエリで見つからなかったレコードを検索しましたが、何も見つかりませんでした。

+0

サーバーでは、どのような表、ビュー、ストアプロシージャを作成できますか。どのようなタイプのSQLですか? – Jester

+0

"テーブル1のt.column1、t.column2 を選択します。 ここで、t.column1は( 'value1'、 'value2'、 'value3')ではありません。何千ものアイテムしかない場合は、そのようなリストに入れることができます。 –

答えて

0

解決策は、Oracleではdualが単一行の単一列表である場合に機能します。 希望の値を仮想選択できる1つのテーブルが必要です!

警告DBにアクセスできないので、以下の質問は一度もテストしていません。

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をvalue1のSQLServerの同等物を信じては SELECT VALUE1であるOR 'VALUE1' を選択します。

私はSQLServerの人は、Oracleの選択デュアルからの RichardTheKiwiバージョンが優れているということかもしれないですように

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; 

を試してみてください。

+0

十分に、SQL Server 2008 R2です。私はT-SQLに限定されていると指定していたはずです。私はかなり選択、更新、挿入と削除のみに制限されている、私はストアドプロシージャにアクセスすることはできません(私はその周りの方法を見つけたが)、ビューやテーブルを作成することはできません。 –

2

私は同様のものを試しました:

最初に必要な値をすべて含むテーブルを作成します。これは、必要な値を返します

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

は、以下のように句で試行し

create table table_values(values varchar2(30)); 

を言うことができます。

+0

最初の投稿で彼はtmpテーブルは言及しなかった! – elrado

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 

注:VALUES後

  1. 各(...)は、単一の行で、あなたが複数の列を持つことができます。
  2. 派生テーブルの後のv(value)は、テーブルに与えられたエイリアスと列名です。レコードがTABLE1に存在しない場合でも、LEFT JOINを
  3. はすなわちt1.column1 is null
  4. 、我々は一致させることができないレコードのみを保つ、
  5. そして、派生テーブルvからの値を保持し、私は最初の列を切り替えましたvから選択してください。列2は常にnullであるため削除されます
関連する問題