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

如何通过Subquery实现两张表的关联查询并返回指定结果?

SQL查询方案:获取表2标记为TRUE的ID及其关联子ID

表结构

表1(父子关系表)

IDParent ID
00001256
0000129800001256
00087612
00098542
0000921400087612
0008734300098542
00456336

表2(标记表)

IDFlag
00001256TRUE
10000000
00087612TRUE
10000001
10000002
10000003
00456336TRUE

查询需求

提取表2中Flag = TRUE的所有ID,同时获取表1中Parent ID匹配这些ID的子ID,最终将两类ID合并为一个结果集(即使标记ID没有对应子ID也要保留)。

预期结果:

Results
00001256
00001298
00087612
00009214
00456336

现有代码片段

已写出筛选表2标记ID的子查询:

SELECT ID
FROM table2
WHERE Flag = TRUE

解决方案

可以通过UNION ALL合并两类结果,将你的子查询作为过滤条件嵌套使用,以下是两种可行方案:

方案1:UNION ALL + 子查询

直接合并标记ID和对应子ID的结果:

-- 提取表2中Flag为TRUE的ID
SELECT ID AS Results
FROM table2
WHERE Flag = TRUE

UNION ALL

-- 提取表1中Parent ID属于上述标记ID的子ID
SELECT t1.ID AS Results
FROM table1 t1
WHERE t1.`Parent ID` IN (
    SELECT ID
    FROM table2
    WHERE Flag = TRUE
)
ORDER BY Results;

方案2:CTE + JOIN优化(适合大数据量)

用公共表表达式(CTE)避免重复执行子查询,提升查询效率:

WITH flagged_ids AS (
    SELECT ID
    FROM table2
    WHERE Flag = TRUE
)
-- 提取标记ID
SELECT fi.ID AS Results
FROM flagged_ids fi

UNION ALL

-- 提取关联的子ID
SELECT t1.ID AS Results
FROM table1 t1
JOIN flagged_ids fi ON t1.`Parent ID` = fi.ID

ORDER BY Results;

说明

  • UNION ALL会保留所有结果(含重复值,若存在),如果需要去重可替换为UNION,但本次需求无重复场景,UNION ALL效率更高。
  • ORDER BY Results用于匹配示例结果顺序,可根据实际需求调整或移除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:03:21