包含多个表的 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

感谢大家的帮助。