我正在尝试编写我的第一个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
答案 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