MINUS代数运算符在firebird数据库中设置

时间:2012-01-24 13:50:32

标签: sql firebird set-difference firebird2.1

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

第一个查询返回(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)

感谢

2 个答案:

答案 0 :(得分:2)

在FB中没有减号运算符,所以:

select x1.fld from table x1 
where
not EXISTS(select x2.fld from table x2 where x2.fld=x1.fld) 

答案 1 :(得分:1)

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来合并select1select2,然后仅保留select1中未出现在select2中的那些行。