【问题标题】:Left Join misbehaving - VBA SQL左连接行为不端 - VBA SQL
【发布时间】:2021-11-28 13:03:05
【问题描述】:

表 1:客户信息数据(大约有 5 万条记录)
表 2:按客户 ID 分类的销售额(有大约 25K 条记录)

当我根据客户 ID 在表 1 上执行表 2 的销售数据左连接时,输出有少量记录 (~500),销售数量增加一个单位。例如客户 #1 的销售量是 200,我在连接输出中得到的销售量是 201。再次注意,这仅适用于少数记录,对于大多数数据,它是绝对正确连接的。

SQL 查询是一个非常标准的查询:

SELECT [Table1$].[ID], Name, Volume, Amount
FROM [Table1$] LEFT JOIN [Table2$] ON [Table1$].[ID] = [Table2$].[ID]

奇怪的是,此错误仅针对少数记录,并且仅针对所有记录更改一个单位。您认为这里的潜在原因是什么?请注意,我从 VBA 运行此 SQL 查询。

编辑:
也许如果我添加一张图片会有所帮助,我已经屏蔽了我的数据:

Table1,蓝色列是joined列,我已经过滤了有问题的ID:

table2,join 列的来源,可以看到是 20,但是和表 1 连接的值是 21。有趣的是,table2 中没有值为 21 的 ID

【问题讨论】:

  • 手动运行 SQL 会得到什么?
  • 您使用的是哪个 dbms?
  • @norie 我没有尝试手动运行 SQL,但这会破坏我的目的,即使通过 SQL 直接运行它对我有帮助,因为我正在开发一个可以处理所有数据的工具直接从 excel 所需的处理,因为这给了我更大的控制权。
  • 手动运行它是调试过程的一部分。如果您得到与从 VBA 运行它时相同的结果,则可能意味着数据或数据库存在问题,如果您不这样做,则问题更可能出在代码上。
  • 您是否使用此代码查询 Excel 文件?

标签: sql vba


【解决方案1】:

肯定有空格或其他东西使看似相同的 ID 不同。确保在销售表上选择不同的 id。

【讨论】:

  • 嗯...我查了一下,还是一样。我还检查了我的 ID 字段是否有两个表中的任何意外空格,但它很干净。另外,如果有这样的例子,连接字段的数量应该会更少。就我而言,连接字段的总数甚至比第二个表中可用的还要多。
  • 你检查了两张表吗?按id从表组中选择Id,count(Id)
猜你喜欢
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多