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

SQLite左连接查询结果不符:为何两段SQL返回不同结果?

SQLite左连接字段选取结果不一致的原因

我想在SQLite中选取部分字段并创建视图,但两段SQL代码返回结果不同,请问原因是什么?

两段对比代码

第一段代码(仅返回第一张表数据):

SELECT date, PCEDurableGoods FROM debtandsavings
left join (select date, FedRate FROM rates) using (date);

第二段代码(返回完整连接结果):

SELECT * FROM debtandsavings
left join rates using (date);

示例数据

debtandsavings表数据

date            PCEDurableGoods
2022-09-01      6.612628882215829
2022-08-01      6.581442803985115
2022-07-01      6.573571833810114
2022-06-01      6.573321162184561
2022-05-01      6.50050461361015

rates表数据

date            FedRate
2022-09-01      2.56
2022-08-01      2.33
2022-07-01      1.68
2022-06-01      1.21
2022-05-01      0.77

执行结果

第一段代码执行结果

date            PCEDurableGoods
2022-09-01      6.612628882215829
2022-08-01      6.581442803985115
2022-07-01      6.573571833810114
2022-06-01      6.573321162184561
2022-05-01      6.50050461361015

第二段代码执行结果

date        PCEDurableGoods     FedRate
2022-09-01  6.61262888221583    2.56
2022-08-01  6.58144280398512    2.33
2022-07-01  6.57357183381011    1.68
2022-06-01  6.57332116218456    1.21
2022-05-01  6.50050461361015    0.77

原因分析

问题核心在于SELECT子句的字段范围:

  1. 第一段代码的SELECT date, PCEDurableGoods只明确指定了debtandsavings表的两个字段,完全没有包含关联子查询中的FedRate字段。实际上左连接已经成功执行,但因为没指定要返回FedRate,结果集中自然不会显示该字段,看起来像是没实现连接。
  2. 第二段代码用SELECT *会选取连接后结果集的所有字段,包括debtandsavings的字段和rates表的FedRate,因此能看到完整的连接结果。

如果要让第一段代码返回包含FedRate的结果,只需把该字段加入SELECT子句:

SELECT date, PCEDurableGoods, FedRate FROM debtandsavings
left join (select date, FedRate FROM rates) using (date);

Python等效代码

out_df = pd.merge(df1[['date','PCEDurableGoods']], df2[['date','FedRate']], on='date', how='left')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:45:32