firebird 数据库中的 MINUS 代数运算符集
我有两个相同的查询,在同一个表上应用了不同的过滤器。
第一个查询返回 (1,2,3,4,5)
,第二个查询返回 (3,4,5)
。
我想应用 MINUS/EXCEPT 运算符:
select1 minus select2 = (1,2)
我应该如何使用 firebird SQL 方言实现此逻辑? (我正在使用 superserver v2.1)
我得到了相反的结果,
select1 UNION select2 = (1,2,3,4,5)
谢谢
I have two equal queries whit different filter applied on the same table.
The first query returns (1,2,3,4,5)
and the second returns (3,4,5)
.
I want apply the MINUS/EXCEPT operator:
select1 minus select2 = (1,2)
How should I implements this logic using firebird SQL dialect ? (I'm using superserver v2.1)
I'm getting the opposite results performing
select1 UNION select2 = (1,2,3,4,5)
thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Firebird 中不存在 MINUS 运算符。我能想到的最接近的近似值如下例所示。这使用了 Firebird 2.1 中引入的通用表表达式,但当然也可以使用子查询(我只是发现 CTE 更具可读性)
在此查询中,我使用 LEFT JOIN 来组合
select1
和select2< /code>,然后仅保留
select1
中未出现在select2
中的行。The MINUS operator does not exist in Firebird. The closest approximation I can think of is something like the example below. This uses Common Table Expressions, introduced in Firebird 2.1, but could of course also work with subqueries (I just find CTE more readable)
In this query I use LEFT JOIN to combine
select1
andselect2
, and then only retain those rows fromselect1
that do not occur inselect2
.在 FB 中没有减号运算符,因此:
In FB there is no minus operator, so :