具有多个联接的SQL语法错误

问题描述

我正在用C编写一个客户端来管理图书馆信息系统。我在客户端中编写了此SQL查询,但出现此语法错误。有人可以帮助我找到此错误吗?谢谢。

错误->错误1064(42000):您的sql语法有错误; 检查与您的MariaDB服务器版本相对应的手册 正确的语法,以在CD的内部将copIA用作C on (CD.copIA_idcopIA = C.idcopIA)第1行的内部联接LIbro a'

代码

  snprintf(q,1024,"SELECT CD.copIA_idcopIA,CD.Ripiano,CD.Scaffale 
                     FROM copIA disPONIBILE as CD 
                            inner join copIA as C on (CD.copIA_idcopIA = C.idcopIA) 
                            inner join LIbro as L on (C.LIbro_idLIbro = L.idLIbro) 
                            inner join POSSEDERE as P on (C.idcopIA = P.copIA_idcopIA) 
            WHERE P.BIBLIOTECA_idBIBLIOTECA = '%d' and L.Nome = '%s'",idBiblioteca,buffer);
        
  if(MysqL_query(conn,q)!= 0) {
       print_error (conn,"query SELECT statement Failed");
  } else {
       printf ("query SELECT statement succeeded: %lu rows affected(unsignedlong)MysqL_affected_rows   (conn));
  }

解决方法

如果您的表真的叫COPIA DISPONIBILE,并且其中有一个空格,则必须通过用反引号将其包围来对其进行转义:

snprintf(q,1024,"SELECT CD.COPIA_idCOPIA,CD.Ripiano,CD.Scaffale 
                     FROM `COPIA DISPONIBILE` as CD 
                            inner join COPIA as C on (CD.COPIA_idCOPIA = C.idCOPIA) 
                            inner join LIBRO as L on (C.LIBRO_idLIBRO = L.idLIBRO) 
                            inner join POSSEDERE as P on (C.idCOPIA = P.COPIA_idCOPIA) 
            WHERE P.BIBLIOTECA_idBIBLIOTECA = '%d' and L.Nome = '%s'",idBiblioteca,buffer);