包含多个表的 INNER JOIN 给出 "Syntax error in FROM clause"
INNER JOIN with multiple tables gives "Syntax error in FROM clause"
我正在开发一个 VB.NET 程序,它需要连接多个表并将它们显示在 DataGridView 上。
我写了这个查询:
SELECT m.idMedicos, m.Nombre, m.Apellido, h.idHistorial, h.CedulaP,
r.*, rm.*,
me.Nombre, me.Tipo, me.Administracion
FROM Medicos m
INNER JOIN Historial h ON m.idMedicos = h.idMedicos
INNER JOIN Recetas r ON r.idHistorial = h.idHistorial
INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta
INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento
WHERE h.CedulaP = $dato
($dato
因查询而异)
当我 运行 我的程序时,它失败并出现错误:"Syntax error in FROM clause"。
我尝试在每个 INNER
前添加一个逗号,但错误仍然存在。
注意:我使用的是 MS Access 数据库,并且我 运行 使用 OleDbDataAdapter 进行所有查询。
Dim Consulta As New OleDb.OleDbDataAdapter("Select m.idMedicos, m.Nombre, m.Apellido,
h.idHistorial, h.CedulaP, r.*, rm.*, me.Nombre, me.Tipo, me.Administracion
FROM Medicos m INNER JOIN Historial h ON m.idMedicos = h.idMedicos, INNER JOIN Recetas r ON r.idHistorial = h.idHistorial, INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta,
INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento
WHERE h.CedulaP ='" + dato + "'", conexion)
¿你们能帮我看看这里会发生什么吗? :/
我认为问题在于您没有在初始 SELECT 中包含 me.idMedicamento,因此无法识别它。
查看 this 答案,您似乎需要使用括号来保持连接在逻辑上分开。
Here 是关于该主题的好读物。
正确完成后,您的查询应如下所示:
Dim Consulta As New OleDb.OleDbDataAdapter("Select m.idMedicos, m.Nombre, m.Apellido, h.idHistorial, h.CedulaP, r.*, rm.*, me.Nombre, me.Tipo, me.Administracion FROM (((Medicos m INNER JOIN Historial h ON m.idMedicos = h.idMedicos ) INNER JOIN Recetas r ON r.idHistorial = h.idHistorial ) INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta ) INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento WHERE h.CedulaP ='" + dato + "'", conexion)
我已经找到了这个问题的解决方案(事实上,很久以前。)
我下载了 Fly Speed MySQL Query... 这是一个程序,您可以在其中创建表格、关系和其他内容,最后生成正确的代码。 (有时您需要根据需要进行一些更改)。
http://www.activedbsoft.com/overview-querytool.html
感谢大家的帮助。
我正在开发一个 VB.NET 程序,它需要连接多个表并将它们显示在 DataGridView 上。
我写了这个查询:
SELECT m.idMedicos, m.Nombre, m.Apellido, h.idHistorial, h.CedulaP,
r.*, rm.*,
me.Nombre, me.Tipo, me.Administracion
FROM Medicos m
INNER JOIN Historial h ON m.idMedicos = h.idMedicos
INNER JOIN Recetas r ON r.idHistorial = h.idHistorial
INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta
INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento
WHERE h.CedulaP = $dato
($dato
因查询而异)
当我 运行 我的程序时,它失败并出现错误:"Syntax error in FROM clause"。
我尝试在每个 INNER
前添加一个逗号,但错误仍然存在。
注意:我使用的是 MS Access 数据库,并且我 运行 使用 OleDbDataAdapter 进行所有查询。
Dim Consulta As New OleDb.OleDbDataAdapter("Select m.idMedicos, m.Nombre, m.Apellido,
h.idHistorial, h.CedulaP, r.*, rm.*, me.Nombre, me.Tipo, me.Administracion
FROM Medicos m INNER JOIN Historial h ON m.idMedicos = h.idMedicos, INNER JOIN Recetas r ON r.idHistorial = h.idHistorial, INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta,
INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento
WHERE h.CedulaP ='" + dato + "'", conexion)
¿你们能帮我看看这里会发生什么吗? :/
我认为问题在于您没有在初始 SELECT 中包含 me.idMedicamento,因此无法识别它。
查看 this 答案,您似乎需要使用括号来保持连接在逻辑上分开。 Here 是关于该主题的好读物。
正确完成后,您的查询应如下所示:
Dim Consulta As New OleDb.OleDbDataAdapter("Select m.idMedicos, m.Nombre, m.Apellido, h.idHistorial, h.CedulaP, r.*, rm.*, me.Nombre, me.Tipo, me.Administracion FROM (((Medicos m INNER JOIN Historial h ON m.idMedicos = h.idMedicos ) INNER JOIN Recetas r ON r.idHistorial = h.idHistorial ) INNER JOIN RecetaMedica rm ON rm.idReceta = r.idReceta ) INNER JOIN Medicamentos me ON me.idMedicamento = rm.idMedicamento WHERE h.CedulaP ='" + dato + "'", conexion)
我已经找到了这个问题的解决方案(事实上,很久以前。)
我下载了 Fly Speed MySQL Query... 这是一个程序,您可以在其中创建表格、关系和其他内容,最后生成正确的代码。 (有时您需要根据需要进行一些更改)。
http://www.activedbsoft.com/overview-querytool.html
感谢大家的帮助。