我有两个相同的查询,在同一张表上应用了不同的过滤器。
第一个查询返回(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)
谢谢
我有两个相同的查询,在同一张表上应用了不同的过滤器。
第一个查询返回(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)
谢谢
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 来组合select1
and select2
,然后只保留那些select1
不在select2
.
在 FB 中没有减号运算符,所以:
select x1.fld from table x1
where
not EXISTS(select x2.fld from table x2 where x2.fld=x1.fld)