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

多表连接SQL查询需求:获取2021年ID与ID4关联结果

多表连接SQL查询需求与问题

需求描述

编写多表连接的SQL查询,获取2021年对应的ID与ID4的关联结果。

现有4张表结构

1) table1

IDDate
1232020
1232021
4562022
4562021

2) table2

idfulldateid2year
123102021xyz2020
123102020xyz2021
456102021abc2021
456102022abc2022

3) table3

id3fulldateid2year
w12102021xyz2020
w12102020xyz2021
a12102021abc2021
a12102022abc2022

4) table4

id4fulldateid3year
1990102021w122020
1990102020w122021
2060102021a122021
2060102022a122022

期望输出

IDID4
1231990
4562060

当前编写的查询语句

Select a.ID, d.ID4
from table1 as a
left join table2 as b on a.id = b.id and a.date = b.year
inner join table3 as c on b.id2 = c.id2  and b.fulldate = c.fulldate
inner join table4 as d on c.id3 = d.id3 and c.fulldate = d.fulldate
where b.year = '2021'

查询修正方案

当前查询存在逻辑问题:使用left join table2后在where中过滤b.year = '2021',会将左连接自动转为内连接,且关联条件未精准锁定2021年数据链路,可能出现多余关联。

以下是两种可行的修正写法:

写法一:精准锁定各表2021年数据

SELECT a.ID, d.ID4
FROM table1 AS a
INNER JOIN table2 AS b 
    ON a.id = b.id 
    AND a.Date = 2021
    AND b.year = 2021
INNER JOIN table3 AS c 
    ON b.id2 = c.id2 
    AND b.fulldate = c.fulldate
    AND c.year = 2021
INNER JOIN table4 AS d 
    ON c.id3 = d.id3 
    AND c.fulldate = d.fulldate
    AND d.year = 2021;

写法二:通过year字段简化关联逻辑

SELECT a.ID, d.ID4
FROM table1 AS a
INNER JOIN table2 AS b 
    ON a.id = b.id 
    AND a.Date = 2021 
    AND b.year = 2021
INNER JOIN table3 AS c 
    ON b.id2 = c.id2 
    AND b.year = c.year
INNER JOIN table4 AS d 
    ON c.id3 = d.id3 
    AND c.year = d.year;

两种写法均可得到期望输出,核心是精准锁定2021年的关联数据链路,避免不必要的关联和过滤逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:37