mysql vs ms-access DB上的sql查询左连接
Posted
技术标签:
【中文标题】mysql vs ms-access DB上的sql查询左连接【英文标题】:sql query left join on mysql vs ms-access DB 【发布时间】:2012-06-28 14:15:49 【问题描述】:这个查询
SELECT *
FROM tblContracts
LEFT JOIN tblPartys ON tblContracts.id = tblPartys.Contract_id
INNER JOIN tblAdministrators
ON tblContracts.AdministratorID = tblAdministrators.ID
适用于 mysql 数据库,但不适用于 Access DB !!!
我遇到了这个错误:
System.Data.OleDb.OleDbException:语法错误(缺少运算符) 查询表达式 'tblContracts.id = tblPartys.Contract_id INNER JOIN tblAdministrators ON tblContracts.AdministratorID = tblAdministrators.I'.在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult 小时)在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(对象& 执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 行为,对象和执行结果)在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 行为,字符串方法)在 System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior 行为)
【问题讨论】:
您还应该包括您对数据库执行的代码。 【参考方案1】:尝试在第一个连接周围添加一对括号
SELECT *
FROM (tblContracts
LEFT JOIN tblPartys ON tblContracts.id = tblPartys.Contract_id)
INNER JOIN tblAdministrators
ON tblContracts.AdministratorID = tblAdministrators.ID
【讨论】:
【参考方案2】:根据您发布的错误,您将ON tblContracts.AdministratorID = tblAdministrators.ID
误写为ON tblContracts.AdministratorID = tblAdministrators.I
,如下所述:
查询表达式“tblContracts.id = tblPartys.Contract_id INNER JOIN tblAdministrators ON tblContracts.AdministratorID = tblAdministrators.I”中有语法错误(缺少运算符)。在...
所以要保证写成ON tblContracts.AdministratorID = tblAdministrators.ID
【讨论】:
【参考方案3】:试试这个:
SELECT * FROM ((tblContracts
LEFT JOIN tblPartys ON tblContracts.id = tblPartys.Contract_id )
INNER JOIN tblAdministrators ON tblContracts.AdministratorID = tblAdministrators.ID )
根据我的经验,Access 喜欢括号...有点太多了,如果你问我的话。
【讨论】:
以上是关于mysql vs ms-access DB上的sql查询左连接的主要内容,如果未能解决你的问题,请参考以下文章
VS Lightswitch 和 MS Access DB?
有经验的 DBA 应该使用哪种 C# 操作 ms-access 的方法?
如何在线获取静态 MS-Access DB 并使用 PHP 连接到它?