Sql 多个内部联接时查询表达式VBA中出现语法错误(缺少运算符)
我发现语法错误(缺少运算符) 请在下面找到我的VBA代码Sql 多个内部联接时查询表达式VBA中出现语法错误(缺少运算符),sql,vba,excel,adodb,Sql,Vba,Excel,Adodb,我发现语法错误(缺少运算符) 请在下面找到我的VBA代码 Sub macro() sql_string = "SELECT [Sheet2$].[Sr], [no], [Code], [Sheet3$].[Srr], [Family], [nos], [Sheet1$].[Sr], [LongName]" & _ " FROM [Sheet3$], [Sheet2$], [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet2$].[Sr]=[Sheet3$
Sub macro()
sql_string = "SELECT [Sheet2$].[Sr], [no], [Code], [Sheet3$].[Srr], [Family], [nos], [Sheet1$].[Sr], [LongName]" & _
" FROM [Sheet3$], [Sheet2$], [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet2$].[Sr]=[Sheet3$].[Srr]" & _
" INNER JOIN [Sheet2$] ON [Sheet2$].[no]=[Sheet3$].[nos]"
sq = SQL_query(sql_string)
end sub
Function SQL_query(ByRef sql_string As Variant)
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = sql_string
rs.Open strSQL, cn
Sheet5.Range("A21").CopyFromRecordset rs
End Function
请查看下表
表1-
表2-
表3-
请指出代码中缺少的地方。解决VBA中凌乱的SQL查询的一个好方法是将它们分解,因为SQL将忽略所有额外的空格和换行符,但我们将能够更好地理解它,并发现问题 因此,我们可以使用查询将您的行拆分为:
sql_string = "
SELECT
[Sheet2$].[Sr],
[no],
[Code],
[Sheet3$].[Srr],
[Family],
[nos],
[Sheet1$].[Sr],
[LongName]
FROM [Sheet3$], [Sheet2$], [Sheet1$]
INNER JOIN [Sheet2$]
ON [Sheet2$].[Sr]=[Sheet3$].[Srr]
INNER JOIN [Sheet2$]
ON [Sheet2$].[no]=[Sheet3$].[nos]"
现在我们可以看到连接中的一些混淆,我在下面进一步整理了这些混淆,以及所有字段中指定的表名。有两个问题,例如,不能将3个表连接到1个表,但可以在两个表之间进行连接,然后在“that”和第三个表之间进行连接
sql_string = "
SELECT
[Sheet2$].[Sr],
[Sheet2$].[no],
[Sheet2$].[Code],
[Sheet3$].[Srr],
[Sheet3$].[nos],
[Sheet3$].[Family],
[Sheet1$].[Sr],
[Sheet1$].[LongName]
FROM [Sheet2$]
INNER JOIN [Sheet3$]
ON [Sheet2$].[Sr]=[Sheet3$].[Srr]
INNER JOIN [Sheet1$]
ON [Sheet1$].[Sr]=[Sheet3$].[Srr]"
粘贴该行以替换您的sql\u string=“SELECT[Sheet2$]..
行(按原样,忽略它现在的长度)
让我知道进展如何
这里有一个链接,链接到更多关于 还可以使用以下语法在JOIN语句中链接多个ON子句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1compoprtable2.field1 AND
ON table1.field2compoprtable2.field2) OR
ON table1.field3compoprtable2.field3)];
SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)] ON
table3.field3compoprtablex.fieldx)] ON
table2.field2compoprtable3.field3) ON
table1.field1compoprtable2.field2;
您还可以使用以下语法嵌套JOIN语句:
SELECT fields
FROM table1 INNER JOIN table2
ON table1.field1compoprtable2.field1 AND
ON table1.field2compoprtable2.field2) OR
ON table1.field3compoprtable2.field3)];
SELECT fields FROM table1 INNER JOIN (table2 INNER JOIN [( ]table3
[INNER JOIN [( ]tablex [INNER JOIN ...)] ON
table3.field3compoprtablex.fieldx)] ON
table2.field2compoprtable3.field3) ON
table1.field1compoprtable2.field2;
左连接
或右连接
可以嵌套在内部连接
中,但是
内部联接
不能嵌套在左联接
或右联接
中。
(最后一部分不应适用于这种情况,因为您现在有了直接嵌套的内部联接
s。)
根据您的指导,感谢所有人的帮助 以下语法适用于多重内部联接
sql_string = "SELECT [Sheet2$].[Sr], [no], [Code], [Sheet3$]." & _
"[nos], [Family], [Sheet1$].[LongName]" & _
" FROM (([Sheet2$] INNER JOIN [Sheet3$] ON [Sheet2$].[Sr]=[Sheet3$].[Srr])" & _
" INNER JOIN [Sheet1$] ON [Sheet1$].[Sr]=[Sheet3$].[Srr])"
代码在哪一行中断?是不是
rs.Open strSQL,cn
?@ashleedawg是的,先生..在Access中,ACE,我相信您一次只能连接两个表。我以前尝试过,但最终失败了(SQL Server,这会起作用)。您必须按照此答案重新构造它,您可以连接多个表,我认为这不是问题