我有两个相同的查询,在相同的表上应用了不同的过滤器。
第一个查询返回(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)
感谢
答案 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来合并select1
和select2
,然后仅保留select1
中未出现在select2
中的那些行。