2

我有两个相同的查询,在同一张表上应用了不同的过滤器。

第一个查询返回(1,2,3,4,5),第二个返回(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

Firebird 中不存在 MINUS 运算符。我能想到的最接近的近似值类似于下面的示例。这使用了在 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 来组合select1and select2,然后只保留那些select1不在select2.

于 2012-01-24T14:22:30.153 回答
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 回答