Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多连接语句上的语法错误_Sql_Ms Access - Fatal编程技术网

Sql 多连接语句上的语法错误

Sql 多连接语句上的语法错误,sql,ms-access,Sql,Ms Access,您好,我发现这个sql语句有语法错误,有人能告诉我吗?谢谢 String sql = "Select tblStudent.*,tblSchool.*,tblAgents.* " + "FROM tblStudent LEFT JOIN tblSchool " + "ON (tblStudent.schoolID = tblSchool.schoolID) " + "LEFT JOIN tblAgents " + "ON (tblStudent.agentID =

您好,我发现这个sql语句有语法错误,有人能告诉我吗?谢谢

String sql = "Select tblStudent.*,tblSchool.*,tblAgents.* " +
    "FROM tblStudent LEFT JOIN tblSchool " +
    "ON (tblStudent.schoolID = tblSchool.schoolID) " +
    "LEFT JOIN tblAgents " +
    "ON (tblStudent.agentID = tblAgents.agentID) " +
    "WHERE tblStudent.StudentID='" + studentID + "'";
我希望我能做多次连接


但是我得到了一个语法错误。

对于access,带有多个连接的括号表示以下内容。如果有三个联接,则from后面有两个左括号。最后一个联接没有右括号

String sql = "Select tblStudent.*,tblSchool.*,tblAgents.* " +
"FROM (tblStudent LEFT JOIN tblSchool " +
"ON (tblStudent.schoolID = tblSchool.schoolID)) " +
"LEFT JOIN tblAgents " +
"ON (tblStudent.agentID = tblAgents.agentID) " +
"WHERE tblStudent.StudentID='" + studentID + "'";

Access SQL注入已在其他章节中介绍。

我相信您的最终SQL应该如下所示:

SELECT tblStudent.*
    ,tblSchool.*
    ,tblAgents.*
FROM tblSchool
RIGHT JOIN (
    tblAgents RIGHT JOIN tblStudent ON tblAgents.agentID = tblStudent.agentID
    ) ON tblSchool.schoolID = tblStudent.schoolID
WHERE tblStudent.StudentID=111;
因此,用于创建此SQL的VBA代码应该是

Dim sql As String

sql = "SELECT tblStudent.* ,tblSchool.* ,tblAgents.* " & _
    "FROM tblSchool RIGHT JOIN (" & _
    "tblAgents RIGHT JOIN tblStudent ON tblAgents.agentID = tblStudent.agentID" & _
    ") ON tblSchool.schoolID = tblStudent.schoolID " & _
    "WHERE tblStudent.StudentID=" & studentID

这里我假设
studentID
是数字字段。另外,我建议不要使用
*
从多个表中选择数据,否则列名可能不可预测,并且如注释中所述,它将需要额外的资源,而这些资源将不会被使用。

Access在多个联接时需要括号。但我在语句中放了括号。确定,您永远不应该使用*选择所有字段,尤其是当您有一个联接时,因为您在多个列中发送相同的数据,这会浪费服务器资源。你应该列出你需要的列,并且只列出那些列。像这样插入StudentID,你就可以进行sql注入了。请使用参数。括号使用错误。使用查询设计器生成查询,然后将其复制到VBA
Dim sql As String

sql = "SELECT tblStudent.* ,tblSchool.* ,tblAgents.* " & _
    "FROM tblSchool RIGHT JOIN (" & _
    "tblAgents RIGHT JOIN tblStudent ON tblAgents.agentID = tblStudent.agentID" & _
    ") ON tblSchool.schoolID = tblStudent.schoolID " & _
    "WHERE tblStudent.StudentID=" & studentID