SQL语法错误?

时间:2015-11-30 17:45:55

标签: mysql sql

我正在尝试编写我的第一个SQL查询之一,但似乎语法错误。过去两个小时我试图反复改变,但在第3行的某个地方似乎仍然存在问题。有人可以帮助我吗?

SELECT prodotti.ID_Prodotto, prodotti.ID_Ditta, 
      prodotti.Nome, prodotti.Descrizione, prodotti.ID_Tipologia, 
      prodotti.Immagine, cp.Nome, valori.Valore 
FROM prodotti, campi tipologia as cp, valori 
WHERE prodotti.ID_Ditta = '1'
    and cp.ID_tipologia = prodotti.ID_tipologia 
    and (valori.ID_prodotto = prodotti.ID_prodotto 
    and valori.ID_Campo_Tipologia = cp.ID_campo);

这是我收到的错误消息:

#1064 - You have an error in your SQL syntax; check the manual that  corresponds to your 
MySQL server version for the right syntax to use near 'as cp, valori WHERE prodotti.ID_Ditta = '1'
and cp.ID_tipologia = prodotti.ID_ti' at line 3 

4 个答案:

答案 0 :(得分:4)

你的SQL有一个typpo:

campi tipologia AS cp,

删除2个表之间的空格;

答案 1 :(得分:3)

如果表名是一个包含空格的表名,则需要在表名中加回一个空格。

否则,还有另一个表,你需要一个逗号吗?

SELECT prodotti.ID_Prodotto, prodotti.ID_Ditta, prodotti.Nome, prodotti.Descrizione,
prodotti.ID_Tipologia, prodotti.Immagine, cp.Nome, valori.Valore 
FROM prodotti, `campi tipologia` as cp, valori 
WHERE prodotti.ID_Ditta = '1'
and cp.ID_tipologia = prodotti.ID_tipologia 
and (valori.ID_prodotto= prodotti.ID_prodotto and valori.ID_Campo_Tipologia = cp.ID_campo);

是的,见下文,我想可以有一个带空格的表名。从来没有尝试过,说实话

create table `a b`
(
    id int
);

答案 2 :(得分:1)

被称为“campi tipologia”的表应该有一个下划线,(或者其他东西)而不是空格...如果它真的是两个单词,那么你需要用括号或引号括起来。

SELECT prodotti.ID_Prodotto, prodotti.ID_Ditta, 
    prodotti.Nome, prodotti.Descrizione, prodotti.ID_Tipologia, 
    prodotti.Immagine, cp.Nome, valori.Valore 
FROM prodotti, [campi tipologia] as cp, valori 
WHERE prodotti.ID_Ditta = '1'
  and cp.ID_tipologia = prodotti.ID_tipologia 
  and (valori.ID_prodotto = prodotti.ID_prodotto 
  and valori.ID_Campo_Tipologia = cp.ID_campo);

SELECT prodotti.ID_Prodotto, prodotti.ID_Ditta, 
    prodotti.Nome, prodotti.Descrizione, prodotti.ID_Tipologia, 
    prodotti.Immagine, cp.Nome, valori.Valore 
FROM prodotti, "campi tipologia" as cp, valori 
WHERE prodotti.ID_Ditta = '1'
  and cp.ID_tipologia = prodotti.ID_tipologia 
  and (valori.ID_prodotto = prodotti.ID_prodotto 
  and valori.ID_Campo_Tipologia = cp.ID_campo);

SELECT prodotti.ID_Prodotto, prodotti.ID_Ditta, 
    prodotti.Nome, prodotti.Descrizione, prodotti.ID_Tipologia, 
    prodotti.Immagine, cp.Nome, valori.Valore 
FROM prodotti, campi_tipologia as cp, valori 
WHERE prodotti.ID_Ditta = '1'
  and cp.ID_tipologia = prodotti.ID_tipologia 
  and (valori.ID_prodotto = prodotti.ID_prodotto 
  and valori.ID_Campo_Tipologia = cp.ID_campo);

更好的是,为所有表名使用别名:

SELECT p.ID_Prodotto, p.ID_Ditta, 
    p.Nome, p.Descrizione, p.ID_Tipologia, 
    p.Immagine, cp.Nome, v.Valore 
FROM prodotti p, [campi tipologia] as cp, valori v 
WHERE prodotti.ID_Ditta = '1'
  and cp.ID_tipologia = p.ID_tipologia 
  and v.ID_prodotto = p.ID_prodotto 
  and v.ID_Campo_Tipologia = cp.ID_campo);

和新的(自1992年以来)加入语法......

SELECT p.ID_Prodotto, p.ID_Ditta, 
    p.Nome, p.Descrizione, p.ID_Tipologia, 
    p.Immagine, cp.Nome, v.Valore 
FROM prodotti p
   Join [campi tipologia] cp 
       on cp.ID_tipologia = p.ID_tipologia 
   Join valori v 
       on v.ID_prodotto = p.ID_prodotto 
          and v.ID_Campo_Tipologia = cp.ID_campo
WHERE prodotti.ID_Ditta = '1'

答案 3 :(得分:0)

你能举例说明你想要实现的目标吗?你有关于数据库结构的更多信息吗?对我来说,它看起来有点过分,就像你正在努力实现可能更容易的事情。找到了一些可能错误的代码,你是否错误地认为首先是声明?

cp.ID_tipologia = prodotti.ID_tipologia