1

mysql テーブルで内部結合を行う必要がありますが、それは同じテーブルです。

テーブルのカテゴリがあります: このテーブルの例は次のとおりです。

id | id_lingua | id_registro | categoria | nivel
1    1           1             Pastas      0
2    2           1             Folders     0
3    3           1             Carpetas    0
4    1           2             Feminina    1
5    2           2             Women       1
6    3           2             Mujeres     1

nivel は、それがカテゴリかサブカテゴリかを定義するキーです。これらのカテゴリをリストし、次に親カテゴリの id_registro を含むフィールド全体で親カテゴリ レベルを指定する必要があります。

クリアしたかどうかはわかりませんが、インナーはこのテーブルにどのように参加しますか?

テーブルは次のとおりです。

id  id_lingua  id_registro  categoria  nivel
1   1          3            Pastas     0
2   2          3            Folders    0
3   3          3            Carpetas   0
4   1          4            Feminina   3
5   2          4            Women      3
6   3          4            Mujeres    3

そしてこの相談:

SELECT cat.*, parent.categoria as nome
FROM categorias cat
INNER JOIN categorias parent
ON cat.nivel=parent.id_registro
AND cat.id_lingua=2

戻る:

id  id_lingua  id_registro  categoria  nivel  nome
5   2          4            Women      3      Pastas
5   2          4            Women      3      Folders
5   2          4            Women      3      Carpetas
4

1 に答える 1

12

必要だと思います(一致しなかったLEFT JOIN行が表示されます)。parent

また、あなたも合わせたいようですid_lingua

SELECT cat.*, parent.categoria as nome
FROM categorias cat
LEFT JOIN categorias parent
ON cat.nivel = parent.id_registro
  AND cat.id_lingua = parent.id_lingua
WHERE cat.id_lingua = 2

を追加することもできます。 は一致しないためIFNULL、表示したいように見えるためです: (実際の空の文字列を意図していない限り)parent.*NULLEmpty

SELECT cat.*, IFNULL(parent.categoria, 'Empty') as nome
FROM categorias cat
LEFT JOIN categorias parent
ON cat.nivel = parent.id_registro
  AND cat.id_lingua = parent.id_lingua
WHERE cat.id_lingua = 2

この回答には、異なる結合の違いを説明する素晴らしい図があります。

画像

于 2013-04-16T15:37:24.083 に答える