You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取两个T-SQL查询结果的交集?

如何获取两个SQL查询结果的交集

当然可以拿到这两个查询结果的交集,这里有几种常用的实现方案,你可以按需选择:

1. 用INTERSECT关键字(最推荐)

这是SQL里专门用来取两个结果集交集的标准语法,不仅写法简洁,还会自动帮你去重,大部分主流数据库(比如SQL Server、PostgreSQL、MySQL 8.0+等)都支持:

SELECT title FROM operations
INTERSECT
SELECT o.title FROM role_operation ro 
INNER JOIN roles r ON ro.role_id = r.id 
INNER JOIN operations o ON ro.operation_id = o.id 
WHERE r.title = N'role1';

执行这个语句后,会直接返回同时出现在两个查询里的title——也就是operation1、operation3、operation4,和你预期的交集结果一致。

2. 用IN子查询实现

如果你的数据库版本比较旧,对INTERSECT支持不好,或者更习惯子查询的写法,也可以这么做:

SELECT title FROM operations
WHERE title IN (
    SELECT o.title FROM role_operation ro 
    INNER JOIN roles r ON ro.role_id = r.id 
    INNER JOIN operations o ON ro.operation_id = o.id 
    WHERE r.title = N'role1'
);

逻辑很简单:先执行括号里的子查询得到第二个结果集,再从第一个查询的结果里筛选出存在于这个子集中的title值。

3. 用INNER JOIN连接临时结果集

把两个查询的结果分别当作临时表,通过title字段做内连接,也能得到交集:

SELECT DISTINCT op.title
FROM (SELECT title FROM operations) op
INNER JOIN (
    SELECT o.title FROM role_operation ro 
    INNER JOIN roles r ON ro.role_id = r.id 
    INNER JOIN operations o ON ro.operation_id = o.id 
    WHERE r.title = N'role1'
) rop ON op.title = rop.title;

这里加DISTINCT是为了防止出现重复行(如果原查询结果本身有重复数据的话),如果你的两个原始查询结果都是唯一的,可以去掉这个关键字。


内容的提问来源于stack exchange,提问作者developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:04:52