2

「category」という名前のmysqlテーブルがあります。基本的な構造は次のようになります-

------     --------     ------
cat_id     cat_name     parent
------     --------     ------
1          test1        NULL
2          test2        NULL
3          test3        2
4          test4        1
5          test5        3

今、私は単一のクエリで親カテゴリ名(idだけでなく)を持つすべてのカテゴリデータが必要です。それは可能ですか?whileループで2番目のクエリ(子の親名を取得)を使用し、データ全体をマージすることで、これを行うことができます。しかし、単一のクエリでこれを行うことは可能ですか?

4

3 に答える 3

7

列を使用しparentて親のcat_idにリンクし、テーブルをそれ自体で結合します。

SELECT c1.cat_id as childID, c1.cat_name ChildName, c2.cat_name as ParentName
from category c1
LEFT OUTER JOIN category c2
ON c1.parent = c2.cat_id
  • 注意:一部の要素には親(NULL)がないLEFT OUTER JOINため、これらの行も表示されるように配置します。それが望ましくない場合は、のJOIN代わりにを使用してくださいLEFT OUTER JOIN
  • NULL行を表示することもできますが、。を使用する代わりに、他の何か(空またはテキストまたは...)を表示しCOALESCEます。
  • 結果を1つの(大きな)新しいテーブルと見なすことができるため、通常どおりにWHERE句を追加できます。たとえば、親名でフィルタリングします。WHERE c2.cat_name = 'test2'
于 2012-05-03T07:53:02.010 に答える
0
Select p.cat_id, p.cat_name, c.cat_id, c.cat_name, c.parent 
From category Left Join category On p.cat_id = c.parent 
Where p.cat_name = 'name'
于 2012-05-03T07:54:46.810 に答える
-1

c1を選択します。category_nameASカテゴリ、c2。category_nameAS sub_category FROM(

SELECT * FROM category )AS c1 INNER JOIN(

SELECT * FROM category )AS c2ONc1。category_id=c2。category_id

于 2014-07-15T11:00:26.287 に答える