firebird 数据库中的 MINUS 代数运算符集

发布于 2024-12-28 19:23:55 字数 363 浏览 2 评论 0原文

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

第一个查询返回 (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

等你爱我 2025-01-04 19:23:55

Firebird 中不存在 MINUS 运算符。我能想到的最接近的近似值如下例所示。这使用了 Firebird 2.1 中引入的通用表表达式,但当然也可以使用子查询(我只是发现 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< /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)

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

In this query I use LEFT JOIN to combine select1 and select2, and then only retain those rows from select1 that do not occur in select2.

哥,最终变帅啦 2025-01-04 19:23:55

在 FB 中没有减号运算符,因此:

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

In FB there is no minus operator, so :

select x1.fld from table x1 
where
not EXISTS(select x2.fld from table x2 where x2.fld=x1.fld) 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文