单MySQL查询在多个数据库
问题描述:
我一起工作的以下设置:单MySQL查询在多个数据库
考虑两个MySQL数据库:abc
和xyz
,每个都有自己的表:abc
。 table_in_abc
和xyz
。 table_in_xyz
。我需要运行一个简单的MySQL查询,从table_in_abc
中选择元素,加入关系为table_in_xyz
。
在工作台下面的查询工作正常:
SELECT AB.* , XY.*
FROM `abc`.`table_in_abc` AB
LEFT JOIN `xyz`.`table_in_xyz` XY ON AB.`ID` = XY`ID`
我想实现在VBA同样的事情。我能够在单个数据库上运行MySQL查询(请参见下面的示例),但在查询涉及多个数据库时无法这样做。
对单个数据库的简单查询VBA的例子:
Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=3" '
Set rs1 = New ADODB.Recordset
sqlstr = "SELECT * FROM `abc`.`table_in_abc` WHERE `ID`=" & ID & ";"
rs1.Open sqlstr, conn, adOpenStatic
With Worksheets("Main").Cells(a, 1)
.ClearContents
.CopyFromRecordset rs1
End With
rs1.Close
Set rs1 = Nothing
答
我发现了一种通过简单地设置两个连接到两个不同的数据库(在同一个MySQL实例的工作),以解决我的上述问题。
我的代码看起来像这样:
Set conn = New ADODB.Connection
conn.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name _
& ";UID=" & user_id _
& ";PWD=" & password _
& ";OPTION=3" '
Set conn2 = New ADODB.Connection
conn2.Open "DRIVER={MySQL ODBC 5.3 Unicode Driver}" _
& ";SERVER=" & server_name _
& ";DATABASE=" & database_name2 _
& ";UID=" & user_id2 _
& ";PWD=" & password2 _
& ";OPTION=3" '
' SELECT Query with LEFT JOIN on the two different databases
Set rs1 = New ADODB.Recordset
sqlstr = "SELECT AB.* , XY.* FROM `abc`.`table_in_abc` AB LEFT JOIN `xyz`.`table_in_xyz` XY ON AB.`ID` = XY`ID`"
rs1.Open sqlstr, conn, adOpenStatic
With Worksheets("main").Cells(1, 1)
.ClearContents
.CopyFromRecordset rs1
End With
rs1.Close
Set rs1 = Nothing
是在同一个MySQL实例这些数据库?你也可以添加你的VBA代码,你做了一个'LEFT JOIN'命令,并且你收到了什么错误?过去我遇到了麻烦,用我的数据类型来运行查询被截断。尝试休息并确认您的查询字符串。 – nbayly
另请注意,在您的Workbench示例中,您使用'AB'和'XY'而不是'abc'和'xyz'。这只是一个错字或者它可能是问题的原因。 – nbayly