6

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

2 つの列を持つ 28 行を返す query1 があり、クエリ 2 で同じ 2 列を持つ 22 行 2 を返す query2 があります。

query1 から query 2 を差し引いたクエリを作成すると、28-22=6 行しか表示されないはずです。ただし、query1 によって返された 28 行すべてが表示されます。

お知らせ下さい。

4

6 に答える 6

10

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

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

これにより、自分に割り当てられていないすべてのタスクが返されます。それが役立つことを願っています。

于 2013-05-08T11:57:11.990 に答える
6

MINUS が機能しない場合、必要な一般的な形式は、外側の選択のメイン クエリと、存在しない句の他のクエリのバリエーションです。

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) 
于 2012-06-25T21:00:33.150 に答える
2

フィールドはまったく同じではない可能性があります。フィールドの 1 つは char(10) で、もう 1 つは char(20) で、どちらにも文字列 "TEST" が含まれている可能性があります。それらは同じように「見える」かもしれません。

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

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

期待どおりの結果を得るには、このクエリで 22 行を取得する必要があります。

于 2012-06-25T21:03:03.287 に答える
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}。ここで、セット B と重複する用語が含まれていないため、MINUS 操作の前後の count(A) は同じになります。

同様の行で、クエリ 2 で取得された結果セットには、クエリ 1 の結果と一致する用語がない可能性があります。したがって、6 行ではなく 28 行になります。

お役に立てれば。

于 2014-03-11T06:53:00.303 に答える
1

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

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

于 2015-01-06T16:01:43.500 に答える
1

このようなもの:

select field1, field2, . field_n
 from tables
 MINUS
 select field1, field2, . field_n
 from tables;
于 2012-06-25T20:57:55.703 に答える