查询太复杂,尽管它只包含 5 个链接查询和一个表
Posted
技术标签:
【中文标题】查询太复杂,尽管它只包含 5 个链接查询和一个表【英文标题】:Query Too Complex, despite it only containing 5 linked queries and one table 【发布时间】:2021-12-28 19:52:14 【问题描述】:我已经研究过这个问题,但没有找到解决我的问题的方法。我分析了 SQL 代码,找不到任何问题(我不擅长 SQL),花了大约 2 个小时试图解决这个问题,但我无法弄清楚。
该表用于视频游戏,它是用于跟踪 Ravenfield 射击场得分的数据库。我会继续发布 SQL 以供某人分析。
该表是通过将多个查询连接在一起来设置的,但是它们不是复杂的查询,并且数据相当简单。主表为武器信息表,其余为射程表。
这里是 sql 供那些想查看它的人告诉我我的 SQL 是否有问题:
SELECT [Weapon Information].[Weapon Name], [Weapon Information].[Weapon ID], [Weapon Information].[Sub ID], [Weapon Information].[Based On], [Weapon Information].[Country of Origin], [Weapon Information].Type, [Weapon Information].Caliber, [Weapon Information].Capacity, [Weapon Information].Manufacture, [Pistol-1 Final]![Final Score]+[Rifle-1 Final]![Final Score]+[Indoor Range Final]![Final Score]+[Testing Field Final]![Final Score]+[CQB-2 Final]![Final Score] AS [Final Score], [Pistol-1 Final]![Final hits]+[Rifle-1 Final]![Final hits]+[Indoor Range Final]![Final hits]+[Testing Field Final]![Final hits]+[CQB-2 Final]![Final hits] AS [Final Hits], [Pistol-1 Final]![Final Misses]+[Rifle-1 Final]![Final Misses]+[Indoor Range Final]![Final Misses]+[Testing Field Final]![Final Misses]+[CQB-2 Final]![Final Misses] AS [Final Misses], [Final Hits]/[Final Misses] AS [Final Accuracy]
FROM (((([Weapon Information] INNER JOIN [Pistol-1 Final] ON ([Weapon Information].[Sub ID] = [Pistol-1 Final].[Sub ID]) AND ([Weapon Information].[Weapon ID] = [Pistol-1 Final].[Weapon ID]) AND ([Weapon Information].[Weapon Name] = [Pistol-1 Final].[Weapon Name])) INNER JOIN [Rifle-1 Final] ON ([Weapon Information].[Sub ID] = [Rifle-1 Final].[Sub ID]) AND ([Weapon Information].[Weapon ID] = [Rifle-1 Final].[Weapon ID]) AND ([Weapon Information].[Weapon Name] = [Rifle-1 Final].[Weapon Name])) INNER JOIN [Indoor Range Final] ON ([Weapon Information].[Sub ID] = [Indoor Range Final].[Sub ID]) AND ([Weapon Information].[Weapon ID] = [Indoor Range Final].[Weapon ID]) AND ([Weapon Information].[Weapon Name] = [Indoor Range Final].[Weapon Name])) INNER JOIN [Testing Field Final] ON ([Weapon Information].[Sub ID] = [Testing Field Final].[Sub ID]) AND ([Weapon Information].[Weapon ID] = [Testing Field Final].[Weapon ID]) AND ([Weapon Information].[Weapon Name] = [Testing Field Final].[Weapon Name])) INNER JOIN [CQB-2 Final] ON ([Weapon Information].[Sub ID] = [CQB-2 Final].[Sub ID]) AND ([Weapon Information].[Weapon ID] = [CQB-2 Final].[Weapon ID]) AND ([Weapon Information].[Weapon Name] = [CQB-2 Final].[Weapon Name]);
【问题讨论】:
几乎不可能在没有数据的情况下进行分析。错误很清楚。简化查询。问题并不适合 SO。可能想要发布到允许附加文件并提供您的数据库进行分析的论坛。 令人困惑的是什么是表,什么是查询。请改写您的问题。 不知道 ms 访问,但它允许在同一个选择中重复使用计算吗?如果没有,那么这将失败:[Final Hits]/[Final Misses] AS [Final Accuracy]
是的,一个计算可以在同一个SELECT中使用。
好吧,我决定用余下的时间来简化它,但没有奏效。我清理了关系,分析了我的 SQL,但仍然一无所获。最后,在大约下午 5 点,我认输,将 5 个主要查询转换为创建表的操作查询,并使最终查询引用这些表,而不是现在像魅力一样工作。没有错误信息。我必须运行动作查询有点烦人,但我猜总比没有好。我会在桌子上玩一会儿,看看问题是否已解决,但似乎已经解决了。
【参考方案1】:
您在某处获得了 NULL 数据。查询分析器命中 NULL 数据,无法完成查询计划,崩溃。通过在需要时使用 ISNULL 进行包装来修复它 - 或使用表进行重组,以便查询分析器不会尝试将选择标准上移到它无效的地方。 (另外,将所有那些 ! 替换为 . )
【讨论】:
以上是关于查询太复杂,尽管它只包含 5 个链接查询和一个表的主要内容,如果未能解决你的问题,请参考以下文章