マイナスでSQLクエリを作成しようとしています。
2 つの列を持つ 28 行を返す query1 があり、クエリ 2 で同じ 2 列を持つ 22 行 2 を返す query2 があります。
query1 から query 2 を差し引いたクエリを作成すると、28-22=6 行しか表示されないはずです。ただし、query1 によって返された 28 行すべてが表示されます。
お知らせ下さい。
マイナスでSQLクエリを作成しようとしています。
2 つの列を持つ 28 行を返す query1 があり、クエリ 2 で同じ 2 列を持つ 22 行 2 を返す query2 があります。
query1 から query 2 を差し引いたクエリを作成すると、28-22=6 行しか表示されないはずです。ただし、query1 によって返された 28 行すべてが表示されます。
お知らせ下さい。
MINUS の代わりに EXCEPT を使用してみてください。例: あなたに割り当てられていないテーブルにあるタスクを見つけたい場合を考えてみましょう (つまり、基本的に、実行できるタスクを見つけようとしています)。
SELECT TaskID, TaskType
FROM Tasks
EXCEPT
SELECT TaskID, TaskType
FROM Tasks
WHERE Username = 'Vidya'
これにより、自分に割り当てられていないすべてのタスクが返されます。それが役立つことを願っています。
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)
フィールドはまったく同じではない可能性があります。フィールドの 1 つは char(10) で、もう 1 つは char(20) で、どちらにも文字列 "TEST" が含まれている可能性があります。それらは同じように「見える」かもしれません。
作業しているデータベースが「INTERSECT」をサポートしている場合は、このクエリを試して、完全に一致する結果がいくつあるかを確認してください。
select field1, field2 from table1
intersect
select field1, field2 from table2
期待どおりの結果を得るには、このクエリで 22 行を取得する必要があります。
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 行になります。
お役に立てれば。
2 番目のクエリに含まれていない上位のクエリの差分レコードを返します。
あなたの場合、たとえば A={1,2,3,4,5...28} AND B={29,30} の場合、AB={1,2,3....28}
このようなもの:
select field1, field2, . field_n
from tables
MINUS
select field1, field2, . field_n
from tables;