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

SQL Server中如何筛选包含匹配id1和id2的groupid对应的uid记录

解决SQL Server中筛选关联成对ID的Group对应的UID问题

我来帮你搞定这个查询需求!先明确下我们的目标:从Table B里找出那些groupid同时关联了Table A中某一行的id1和id2的uid记录,最终返回符合条件的uid(也就是示例里的1、2、5、6)。

先确认表结构与测试数据

首先把你的测试数据用SQL语句还原出来,方便后续验证:

-- 创建并插入Table A数据
CREATE TABLE TableA (
    id1 INT,
    id2 INT
);
INSERT INTO TableA VALUES (2, 3), (4, 5);

-- 创建并插入Table B数据
CREATE TABLE TableB (
    groupid INT,
    parentid INT,
    uid INT
);
INSERT INTO TableB VALUES
(4, 2, 1),
(4, 3, 2),
(6, 2, 3),
(7, 4, 4),
(8, 4, 5),
(8, 5, 6),
(8, 6, 7);

方案一:使用CTE筛选合法Group后关联取UID

这种方法逻辑清晰,先找出所有符合条件的groupid,再关联回Table B获取对应的uid:

WITH ValidGroups AS (
    -- 找出同时包含TableA某行id1和id2的groupid
    SELECT b.groupid, a.id1, a.id2
    FROM TableB b
    JOIN TableA a ON b.parentid = a.id1
    -- 检查同一groupid下是否存在对应id2的记录
    WHERE EXISTS (
        SELECT 1
        FROM TableB b2
        WHERE b2.groupid = b.groupid
          AND b2.parentid = a.id2
    )
)
-- 从合法group中取出对应id1/id2的uid
SELECT b.uid
FROM TableB b
JOIN ValidGroups vg ON b.groupid = vg.groupid
WHERE b.parentid IN (vg.id1, vg.id2);

方案二:使用分组统计直接筛选

这种方法通过分组统计每个groupid对TableA行的匹配数量,确保同时包含id1和id2:

SELECT b.uid
FROM TableB b
INNER JOIN TableA a 
    ON b.parentid = a.id1 OR b.parentid = a.id2
GROUP BY b.groupid, a.id1, a.id2, b.uid
-- 确保当前groupid对当前TableA行,同时匹配了id1和id2(两个不同的parentid)
HAVING COUNT(DISTINCT b.parentid) = 2;

结果验证

执行以上任意一种SQL,都会得到预期的结果:

uid
----
1
2
5
6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:19:44