打击INNER JOINS - 章节:未知栏目

时间:2010-08-31 17:48:40

标签: mysql sql join mysql-error-1054

SELECT p.id
FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty
INNER JOIN sub_subkategorie ssi
ON pr.sub_subkategorie_id = ssi.ID

表及其重要字段

produkty - id, pozycja
przyporzadkowania - id, produkt_id, sub_kategoria_id, sub_subkategoria_id
sub_subkategorie - id, subkategorie_id, pozycja
subkategorie - id, kategorie_id, pozycja
kategorie - id, pozycja

错误“#1054 - 'on子句'中的未知列'pr.sub_subkategorie_id'”

尝试

SELECT p.id, pr.sub_subkategorie_id

同样的结果。

完整查询(由于上述查询失败而未进行测试):

SELECT p.id
FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty
INNER JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID
INNER JOIN subkategorie si ON ssi.subkategorie_id = si.id
INNER JOIN kategorie c ON si.kategorie_id = c.id
WHERE stany_magazynowe.produkty_id = p.id
AND p.id = pr.produkty_id
AND pr.sub_subkategorie_id =1
AND p.widoczny = '1'
AND p.id = gk_grupy_produkty.id_produktu
AND gk_grupy_produkty.id_grupy =1
AND gk_grupy_produkty.towar_widocznosc =1
AND c.id = '1'
ORDER BY c.pozycja, si.pozycja, ssi.pozycja, p.pozycja

希望我提供足够的信息(早期问题 - SELECT * FROM table WHERE field IN (SELECT id FROM table ORDER BY field2)

编辑:

是的,有拼写错误,但只有在这里,在stackoverflow(太多的咖啡,我的手指飞行)。谢谢大家,你救了我的一天!

4 个答案:

答案 0 :(得分:6)

您以错误的顺序加入表格:

SELECT p.id
FROM produkty p, stany_magazynowe, gk_grupy_produkty, przyporzadkowania pr
INNER JOIN sub_subkategorie ssi
ON pr.sub_subkategorie_id = ssi.ID

错误是由于JOIN关键字与逗号相比具有更高的优先级。像这样的错误是我敦促你不要使用隐式连接语法和逗号的原因之一,而是总是使用JOIN关键字显式地编写连接。

以下是使用显式连接重写的完整查询:

SELECT p.id
FROM produkty p
INNER JOIN przyporzadkowania pr ON p.id = pr.produkty_id
INNER JOIN stany_magazynowe ON stany_magazynowe.produkty_id = p.id
INNER JOIN gk_grupy_produkty ON p.id = gk_grupy_produkty.id_produktu
INNER JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID
INNER JOIN subkategorie si ON ssi.subkategorie_id = si.id
INNER JOIN kategorie c ON si.kategorie_id = c.id
WHERE pr.sub_subkategorie_id = 1
AND p.widoczny = '1'
AND gk_grupy_produkty.id_grupy =1
AND gk_grupy_produkty.towar_widocznosc =1
AND c.id = '1'
ORDER BY c.pozycja, si.pozycja, ssi.pozycja, p.pozycja

相关问题

答案 1 :(得分:1)

您正在将“经典”联接与join关键字混合使用。您应该对所有联接使用join关键字。

错误来自您加入gk_grupy_produkty表,该表不存在该字段。数据库确实将您的查询视为:

SELECT p.id
FROM
  produkty p,
  przyporzadkowania pr,
  stany_magazynowe,
  (gk_grupy_produkty INNER JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID)

您应该使用:

SELECT p.id
FROM
  produkty p
  INNER JOIN przyporzadkowania pr ON p.id = pr.produkty_id
  INNER JOIN stany_magazynowe ON stany_magazynowe.produkty_id = p.id
  INNER JOIN gk_grupy_produkty ON p.id = gk_grupy_produkty.id_produktu
  INNER JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID
  INNER JOIN subkategorie si ON ssi.subkategorie_id = si.id
  INNER JOIN kategorie c ON si.kategorie_id = c.id
WHERE
  pr.sub_subkategorie_id = 1 AND
  p.widoczny = '1' AND
  gk_grupy_produkty.id_grupy = 1 AND
  gk_grupy_produkty.towar_widocznosc = 1 AND
  c.id = '1'
ORDER BY c.pozycja, si.pozycja, ssi.pozycja, p.pozycja

答案 2 :(得分:0)

从这开始:(填写 ???

SELECT p.id
FROM produkty p
JOIN przyporzadkowania pr ON p.??? = pr.???
JOIN sub_subkategorie ssi ON pr.sub_subkategorie_id = ssi.ID

(您无需指定INNER)

你的原始FROM条款:

FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty

表p和pr是否没有指定JOIN条件,这将导致笛卡尔积或交叉连接(在这种情况下可能不是一件好事)以及未在查询中的任何其他位置引用的表:

  

stany_magazynowe,gk_grupy_produkty

指定加入
  

produkty p AND przyporzadkowania pr

并删除

  

stany_magazynowe,gk_grupy_produkty

提示:如果您没有引用SELECT,ORDER BY,GROUP BY,WHERE中的表中的任何列,那么该表可能不属于您的FROM子句。 (除非它是一个连接/联结表。)

答案 3 :(得分:0)

名为sub_subkategoria_id的列是否为拼写错误?