【问题标题】:SQLite join with select not joining as expectedSQLite 加入选择未按预期加入
【发布时间】:2022-12-11 09:04:20
【问题描述】:

我想选择一些列并在 SQLite 中创建一个视图。为什么下面的代码会返回不同的值?

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

但这有效

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

前者返回第一个没有连接的表,但后者返回按预期连接的完整表

下面是一个数据示例

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            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

第一个代码 sn-p (foobar) 的结果

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

https://dbfiddle.uk/e5NWr9I1

编辑:我更新了示例数据,因为人们对日期感到困惑

【问题讨论】:

  • 我无法重现你的结果:dbfiddle.uk/dJRqAgUx
  • 我编辑了数据以使其可重现。您的 dbfiddle 完全重现了问题
  • 你是什​​么意思问题?查询按预期工作:dbfiddle.uk/zcz67drB
  • 是什么让你认为它不加入?
  • 这是一个使用 LEFT 将第一个表连接到第二个表的查询并仅返回第一个表的列的查询。你期待什么?花一些时间阅读有关 LEFT 连接的信息:sqlitetutorial.net/sqlite-left-join

标签: sql sqlite


【解决方案1】:

第一个示例选择 datePCEDurableGoods 并根据您的查询请求仅返回这两列。第二个示例使用通配符并再次按预期返回连接中的所有列。

就实际行集而言,您提供的第二个输出与输入不对应。 2022-05-01/2022-06-01 不在第二个表中,应在FedRate 中返回 NULL。这很可能意味着您没有针对提供的输入执行查询。

【讨论】:

  • “第一个示例选择日期和 PCEDurableGoods,并根据您的查询请求仅返回这两列。”是的,我可以在输出中看到这一点。为什么它不加入查询的第 2 部分。我添加了数据
猜你喜欢
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-27
  • 2016-07-23
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
相关资源
最近更新 更多