sql - Access SQL 中的复杂 JOINS 难以转换为 JET OLEDB
问题描述
我是 Stack Overflow 的长期追随者,但这是我的第一篇文章。我希望社区可以提供帮助。
我有一个成功的访问查询,它返回所需的结果 - 完美!
但是,我试图在 ASP 脚本中使用 OLEDB 连接返回相同的数据库。这都是遗留的东西,但是我们允许网络访问这些遗留信息。
MS Access (2016) 将 Query 显示为...(有效)
SELECT [EventName] & ": " & [RoundCaption] AS RoundTitle, ChunkEntryTable.WinPos
FROM ((EventTable INNER JOIN EventRoundTable ON EventTable.EventId = EventRoundTable.EventId) INNER JOIN ((RoundHeatTable INNER JOIN ChunkTable ON RoundHeatTable.RoundHeatId = ChunkTable.RoundHeatId) INNER JOIN (EventEntryTable INNER JOIN ChunkEntryTable ON EventEntryTable.EventEntryId = ChunkEntryTable.EventEntryId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId) ON EventRoundTable.RoundKeyId = RoundHeatTable.RoundKeyId) LEFT JOIN EventEntryMemberTable ON EventEntryTable.EventEntryId = EventEntryMemberTable.EventEntryId
WHERE (((EventEntryTable.Entry1Id)=[EntryId])) OR (((EventEntryTable.Entry2Id)=[EntryId])) OR (((EventEntryTable.Entry3Id)=[EntryId])) OR (((EventEntryMemberTable.MemberId)=[EntryId]))
ORDER BY EventTable.SortIdx, EventRoundTable.RoundId DESC , EventRoundTable.IsRepechage DESC;
在 OLEDB 中执行此操作。连接字符串如下...
<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO"
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_csresultdb_STRING
MM_csresultdb_STRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xyz.mde;Jet OLEDB:Database Password=xxxxxxxxx;"
%>
连接工作完美,但我似乎无法让 SQL 命令工作。我得到“没有为一个或多个必需参数提供值”。注意:我已将 4 个位置的 [EntryID] 替换为有效值,它在 Access 中完美运行,而不是在 Access 之外使用 OLEDB。这是我正在使用的 SQL...
SELECT EventTable.EventName & ": " & EventRoundTable.RoundCaption AS RoundTitle, ChunkEntryTable.WinPos FROM
((EventTable INNER JOIN EventRoundTable ON EventTable.EventId = EventRoundTable.EventId) INNER JOIN
((RoundHeatTable INNER JOIN ChunkTable ON RoundHeatTable.RoundHeatId = ChunkTable.RoundHeatId) INNER JOIN
(EventEntryTable INNER JOIN ChunkEntryTable ON EventEntryTable.EventEntryId = ChunkEntryTable.EventEntryId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId)
ON EventRoundTable.RoundKeyId = RoundHeatTable.RoundKeyId)
WHERE ((EventEntryTable.Entry1Id)=4741) OR ((EventEntryTable.Entry2Id)=4741) OR ((EventEntryTable.Entry3Id)=4741)
ORDER BY EventTable.SortIdx, EventRoundTable.RoundId DESC , EventRoundTable.IsRepechage DESC;
发现问题**见下面的答案
解决方案
发现问题 ** 这与 SQL 的这一部分有关...
[EventName] & ": " & [RoundCaption] AS RoundTitle
变成
[EventName], [RoundCaption] AS RoundTitle
它有效,但给了我两个单独的字段,而不是一个名为“RoundTitle”的串联字段。所以我将在显示输出期间而不是在查询阶段加入两个结果字段。
哇!想了这么多天。感谢那些让我朝着声明中 AS 部分的方向前进的评论。
推荐阅读
- python - Django 模型 CreateView 不在 HTML 中呈现表单字段
- swift - 创建自定义类并从故事板添加到我的视图控制器?
- angular - 错误:预期的间谍 updateRates 已被调用
- sql - 带有 = 的 Sql where 语句有效,但 LIKE 无效
- javascript - Android Studio(网页帮助)网络:ERR_FILE_NOT_FOUND
- javascript - 如何在 vue.js 中的路由之间传递道具?
- python - 运行服务器上的 Django E.408、E.409 和 E.410 错误
- javascript - 状态问题 - 正在工作,但现在返回一个难以理解的错误
- oracle - oracle数据库中的卷不保存用户信息
- jquery - AngularJS,区分拖动和点击事件,给点击事件传递数据