1

A – ( B ∩ A )

SQL(演算子)と比較して、この一連の数学を見て、何に変換できるのか疑問に思っていました。

4

5 に答える 5

3

ABが同じ「タイプ」(対応する列の列数と互換性のあるデータ型) のテーブルである場合、これは次のように SQL に変換できます。

A EXCEPT (A INTERSECT B) 

もちろん、これは(集合代数と関係代数の両方で)次のものと同等です。

A EXCEPT B 

Aとが異なる「タイプ」Bのテーブルである場合、集合操作はそれらの間では意味がありません。(結合は別のものです。それらを「説明」するリンクがどれほど人気が​​あっても、結合、差異、または交差と混同しないでください。)

結合、差異、および交差もいくつかの方法で表現できるという事実 (明示的な,および演算子に加えて(LEFT) JOIN、 , (NOT) IN, の(NOT) EXISTS組み合わせを使用) は、それを変更しません。UNIONEXCEPTINTERSECT


構文は上記のとおりではありません。EXCEPTいずれかを使用できます (Postgres および SQL-Server で動作します。 を に置き換えると、Oracle でも動作しますMINUS):

  SELECT *
  FROM a

EXCEPT 

  ( SELECT * 
    FROM a
  INTERSECT
    SELECT *
    FROM b
  ) ;

またはこれ (Postgres 8.4 以降で動作: SQL-Fiddle test )

SELECT *
FROM
  ( TABLE a
  EXCEPT 
    ( TABLE a INTERSECT TABLE b ) 
  ) t  ;

そしてこれでさえ(見て、いやSELECT):

 TABLE a
EXCEPT 
  ( TABLE a  INTERSECT  TABLE b ) ;
于 2013-02-03T19:43:05.923 に答える
3

SQLに関して別のオプションを提供するだけです:

SELECT id FROM A
MINUS
SELECT id FROM B

更新:

MINUS最終的な結果セットから重複を削除し、Oracle にのみ存在することに注意してください。

SQL 標準では、他のベンダーでサポートされている EXCEPT を使用します。

SELECT id FROM A
EXCEPT
SELECT id FROM B

標準ではDISTINCT、重複を削除するオプションがあります。重複が削除されるかどうかを確認するには、特定のベンダーのドキュメントを確認する必要があると思います。たとえば、SQL Server の実装はOracleEXCEPTと同じです。MINUS

于 2013-02-03T21:01:22.957 に答える
2

これは A と B の集合差を計算し、 in mats も と同等A - Bです。ここで興味があるのは、B にはない A の要素です。

このブログ投稿を見て、mysql で集合差分を行う方法を確認できます。

于 2013-02-03T18:27:33.187 に答える
0

それは SET A MINUS (SET A INNER JOIN SET B) です。A と B の両方で発生するレコードを取得し (INNER JOIN)、SET A (MINUS) からそれらを削除します。

集合論用語での交差は、SQL 用語での INNER JOIN と同等です。

編集:NOT INと同じであるというあなたの質問については、そうではありません。NOT IN は、列の値 (「選択」) で使用される演算子です。MINUS、JOIN などは、行のセット間で操作を実行するためのセット演算子です。

于 2013-02-03T18:37:45.727 に答える
0

A – ( B ∩ A )同等ですA LEFT OUTER JOIN B WHERE TableB.id IS null

ここに画像の説明を入力

参照リンクはこちら

別のオプションは、使用することです

SELECT * FROM A 
WHERE 
  NOT EXISTS (SELECT * FROM B WHERE A.Id = B.id)
于 2013-02-03T19:29:19.627 に答える