19

ユニオンのように 2 つのクエリ結果をマージする必要がありますが、2 つの結果の違いだけを保持したいと考えています。これは可能ですか?

基本的に、クエリ 1 ですべてのリソースを選択し、クエリ 2 で NOT-ALLOWED リソースを選択しています。最後の結果では明らかに ALLOWED リソースが必要です。

擬似コード:

Query1 - Query2

クエリ結果 1:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   2   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   5   |
+-------+
|   6   |
+-------+

クエリ結果 2:

+-------+
|  id   |
+-------+
|   2   |
+-------+
|   5   |
+-------+

必要:

+-------+
|  id   |
+-------+
|   1   |
+-------+
|   3   |
+-------+
|   4   |
+-------+
|   6   |
+-------+
4

4 に答える 4

55

このように、次を使用しNOT INます。

SELECT id FROM queryOneTable
WHERE id NOT IN (
    SELECT id FROM queryTwoTable
)
于 2009-10-15T02:22:00.467 に答える
4

MySql を持っていないので、SQLExpress でこのクエリをテストしました。私はそれが同じように機能すると仮定しています。

select x.id
from x 
left join y on x.id = y.id
where y.id is null
于 2009-10-15T03:05:32.917 に答える
1

左結合アプローチは、一意性が1 つのIDではなく複数の列値の組み合わせで構成される 2 つのテーブル (または任意の 2 つのクエリ結果セット) で使用できるため、より用途が広いです。また、ネストされた選択を記述するよりもパフォーマンスが高いため、外部結合(左)をマスターするのに優れたSQL(または少なくとも以前はそうであった)と見なされます。

于 2015-09-10T15:11:10.277 に答える