我为访问数据库构建了一个复杂的查询,并且在访问中的工作方式就像魅力一样。但是,当我尝试通过OLEDB在程序中运行相同的查询时,我会得到异常“ JOIN操作中的语法错误”。没有其他信息。

SELECT
    MainTable.Main_dbID,
    D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
    SELECT Main_dbID, Kvp_Value
    FROM KVPTable
    WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;

就我觉得它仍然是代表性的,我已经打破了查询。我使用subsect而不是直接加入的原因是,我需要多次加入我的钥匙值表以将不同的键放入不同的列中。我无法做到其他任何方式。

如果相关,我正在与C#2.0和Visual Studio 2008合作。

有帮助吗?

解决方案

找到了问题。我进入查询的方式打破了...

编辑:如您所见,我在多行上分发了查询,因此阅读更容易。当我将其粘贴到我的源代码中时,发生了这种情况:

"SELECT FooField" +
"FROM BarTable;";

这会导致“选择foofieldfrom Bartable”; - 因此显然是没有有效语法的,这很痛苦。我只是没有首先意识到...

其他提示

当然,这是一个令人困惑的信息。额外的逗号是什么问题:

D0.Value AS ["Value"],  <-- here

我希望这些名称不是真实字段(列)名称,因为价值和时间是保留的单词,并且会导致无尽的问题。我建议至少如果它们是真实的名称,则至少您将它们包裹在方括号中。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top