2

同じテーブルに異なるフィルターを適用した2つの等しいクエリがあります。

最初のクエリはを返し(1,2,3,4,5)、2番目のクエリはを返します(3,4,5)

MINUS /EXCEPT演算子を適用したい:

select1 minus select2 = (1,2)

Firebird SQLダイアレクトを使用してこのロジックを実装するにはどうすればよいですか?(私はスーパーサーバーv2.1を使用しています)

逆の結果が得られています

select1 UNION select2 = (1,2,3,4,5)

ありがとう

4

2 に答える 2

2

FBにはマイナス演算子がないので:

select x1.fld from table x1 
where
not EXISTS(select x2.fld from table x2 where x2.fld=x1.fld) 
于 2012-01-24T17:29:53.083 に答える
2

MINUS 演算子は Firebird には存在しません。私が考えることができる最も近い概算は、以下の例のようなものです。これは、Firebird 2.1 で導入された Common Table Expressions を使用しますが、もちろんサブクエリでも機能します (CTE の方が読みやすいと思います)。

WITH select1 AS (
   SELECT id, ....
),
select2 AS (
   SELECT id, ....
)
SELECT ...
FROM select1 
LEFT JOIN select2 ON select2.id = select1.id -- more conditions...?
WHERE select2.id IS NULL

このクエリでは、LEFT JOIN を使用して と を結合select1し、 にないselect2行のみを保持します。select1select2

于 2012-01-24T14:22:30.153 に答える