2012-06-25 20 views
6

マイナスのSQLクエリを作成しようとしています。SQLのマイナス演算子

私は、クエリ2.

に同じ2列の22行2を返しQUERY2を持って2列 で28行を返すQuery1をを持っている私は、クエリQuery1というマイナスクエリ2を作成するとき、それは唯一の28を表示する必要があります-22 = 6行。 しかし、それはquery1によって返された28行すべてを表示します。

お知らせください。

select field1, field2, . field_n 
from tables 
MINUS 
select field1, field2, . field_n 
from tables; 
+0

どのデータベースをターゲットに設定していますか?私は個人的にオラクルにマイナスを使用したことがあります。私はそれが厳密にSQL Server上でこのフォームに存在しないことを知っています。 – dwerner

+0

マイナスの両側からクエリといくつかのサンプルデータを投稿しますか? –

+0

(oracleと仮定) 'minus'が機能するためには、行全体が正確に一致しなければなりません。 – dwerner

答えて

1

何か。

select <insert list of fields here> 
from mytable a 
join myothertable b 
on b.aId = a.aid 
where not exists (select * from tablec c where a.aid = c.aid) 
+0

も参照してください。http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=115930 – compcobalt

6

MINUSがあなたのために動作しません場合は、あなたが望む一般的な形式は、外側の選択でメインクエリではないの他のクエリの変動は句が存在する。このような

2

フィールドが正確に同じでない可能性があります。 char(10)とchar(20)の2つのフィールドがあり、どちらも文字列「TEST」を持っています。彼らは同じように見えるかもしれません。

作業中のデータベースで「INTERSECT」がサポートされている場合は、このクエリを試して、完全に一致する結果の数を確認してください。

select field1, field2 from table1 
intersect 
select field1, field2 from table2 

期待する結果を得るには、このクエリでは22行が必要です。

+1

OPでは、22行ではなく6行が検索されます(26行は入力ミス)。 – leppie

+1

問合せ1と問合せ2で22行が共通の場合、MINUS問合せは両方の行に共通ではない6行を指定します。私の答えは、データがOPの期待どおりであることを確認することでした。 –

+1

もう一度22を意味します、そうですか? ; p – leppie

10

MINUSではなくEXCEPTを使用してください。例: テーブルにどのタスクが割り当てられていないかを知りたい場合を考えてみましょう(基本的に、実行可能なタスクを見つけようとしています)。

SELECT TaskID, TaskType 
FROM Tasks 
EXCEPT 
SELECT TaskID, TaskType 
FROM Tasks 
WHERE Username = 'Vidya' 

これは、割り当てられていないすべてのタスクを返します。希望が役立ちます。

1

MINUSは、セット操作と同じ原理で動作します。 AとBを設定したとします。 A = {1,2,3,4}; B = {3,5,6} もしAB = {1,2,4}

もしA = {1,3,5}とB = {2,4,6} ならば、AB = {1,3,5}。ここでは、MINUS操作の前後のカウント(A)は、セットBと重複する用語を含まないので同じになります。

同様の行で、クエリ2で得られた結果セットが一致しない可能性がありますquery1の結果を含む用語。したがって、あなたはまだ6行の代わりに28を取得しています。

これが役に立ちます。

1

2番目のクエリに含まれていない上位クエリの差分レコードを返します。

たとえば、 A = {1,2,3,4,5 ... 28} AND B = {29,30}ならばAB = {1,2,3 ... 28}