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-不明な列'pr.sub_subkategorie_id'in'onclause'」

で試してみました

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キーワードを使用して明示的に結合を記述することをお勧めする理由の1つです。

明示的な結合を使用して書き直された完全なクエリは次のとおりです。

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

「クラシック」結合を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
于 2010-08-31T17:59:47.960 に答える
0

列の名前sub_subkategoria_idはタイプミスですか?

于 2010-08-31T17:58:10.787 に答える
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

デカルト積またはクロス結合(この場合はおそらく適切ではない)をもたらすJOIN条件が指定されていないテーブルpおよびprと、クエリ内の他の場所で参照されていないテーブルがあります。

stany_magazynowe、gk_grupy_produkty

のJOINを指定します

produktypおよびprzyporzadkowaniapr

削除します

stany_magazynowe、gk_grupy_produkty

ヒント:SELECT、ORDER BY、GROUP BY、WHEREのテーブルから列を参照しない場合、テーブルはおそらくFROM句に属していません。(結合/ジャンクションテーブルでない限り。)

于 2010-08-31T17:58:08.900 に答える