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

如何编写SQL查询与全部指定Table2条目关联的Table1对象?

解决多对多关联中同时匹配多个条目的SQL查询

针对你的需求——获取Table1中同时关联Table2里item 2和item 3的所有对象,这里提供几种常用的SQL写法:

方法1:GROUP BY + HAVING 统计匹配数

这种方法通过筛选关联目标条目的记录,再按对象分组,统计匹配的唯一条目数是否等于目标数量(此处为2),以此确定同时关联两个条目的对象。

SELECT t1.id, t1.title
FROM Table1 t1
JOIN Table3 t3 ON t1.id = t3.object_id
JOIN Table2 t2 ON t3.item_id = t2.id
WHERE t2.title IN ('item 2', 'item 3')
GROUP BY t1.id, t1.title
HAVING COUNT(DISTINCT t2.id) = 2;

逻辑说明:

  1. 关联三个表,筛选出所有关联item 2或item 3的对象记录;
  2. 按Table1的id和title分组;
  3. 通过HAVING COUNT(DISTINCT t2.id) = 2确保该对象同时关联了两个不同的目标条目。

方法2:多次JOIN关联表

通过两次关联Table3和Table2,分别匹配item 2和item 3,只有同时满足两个关联条件的对象才会被保留。

SELECT t1.id, t1.title
FROM Table1 t1
JOIN Table3 t3_2 ON t1.id = t3_2.object_id
JOIN Table2 t2_2 ON t3_2.item_id = t2_2.id AND t2_2.title = 'item 2'
JOIN Table3 t3_3 ON t1.id = t3_3.object_id
JOIN Table2 t2_3 ON t3_3.item_id = t2_3.id AND t2_3.title = 'item 3';

逻辑说明:

  1. 第一次关联筛选出关联item 2的对象;
  2. 第二次关联筛选出关联item 3的对象;
  3. 只有同时通过两次关联的对象,才会出现在结果集中。

方法3:EXISTS 子查询验证

使用两个EXISTS子查询,分别检查当前对象是否关联了item 2和item 3,只有两个条件都满足的对象才会被选中。

SELECT t1.id, t1.title
FROM Table1 t1
WHERE EXISTS (
    SELECT 1
    FROM Table3 t3
    JOIN Table2 t2 ON t3.item_id = t2.id
    WHERE t3.object_id = t1.id AND t2.title = 'item 2'
)
AND EXISTS (
    SELECT 1
    FROM Table3 t3
    JOIN Table2 t2 ON t3.item_id = t2.id
    WHERE t3.object_id = t1.id AND t2.title = 'item 3'
);

逻辑说明:

  1. 第一个EXISTS验证对象是否关联item 2;
  2. 第二个EXISTS验证对象是否关联item 3;
  3. 两个条件同时满足时,该对象才会被返回。

以上三种方法都能得到预期结果:object 2和object 3。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:01:19