1
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

4 回答 4

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

相关问题

于 2010-08-31T17:51:21.130 回答
1

You are mixing "classical" joins with the join keyword. You should use the join keyword for all the joins.

The error comes from that you are joining on the gk_grupy_produkty table, where that field doesn't exist. The database really looks at your query as:

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)

You should use:

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
于 2010-08-31T17:59:47.960 回答
0

Start with this: (fill in the ???)

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

(You don't need to specify INNER)

Your original FROM clause:

FROM produkty p, przyporzadkowania pr, stany_magazynowe, gk_grupy_produkty

Has tables p and pr for which no JOIN condition is specified which will result in a cartesian product or cross join (probably not a good thing in this case) as well as tables that aren't referenced anywhere else in your query:

stany_magazynowe, gk_grupy_produkty

Specify a JOIN for

produkty p AND przyporzadkowania pr

and remove

stany_magazynowe, gk_grupy_produkty

Hint: If you do not reference any columns from a table in your SELECT, ORDER BY, GROUP BY, WHERE then the table probably does not belong in your FROM clause. (Unless it's a join/junction table.)

于 2010-08-31T17:58:08.900 回答
0

Is the column named sub_subkategoria_id a typo?

于 2010-08-31T17:58:10.787 回答