私は以下のようなテーブル構造を持っています:
id |parent|name |value
1 | 0 | aaa |
2 | 0 | bbb |
3 | 0 | ccc |
4 | 1 | | 111
5 | 1 | | 222
6 | 3 | | 333
子レコードがある場合は親を表示したい。
お気に入り:
(親 ID + 名前 + 値の最初の子)
1 - aaa - 111
3 - ccc - 333
データベースの最初の子の意味はありませんid
。最小値または最小値で最初の子を取得できますが、値は特定の順序でテーブルに格納されないため、わかりません最初の値です。
ただし、が自動インクリメンタル列であると仮定するとid
、最初の子の値は最小の値であり、id
これを行うことができます:
SELECT
t1.parent,
t2.name,
t1.value
FROM tablename AS t1
INNER JOIN
(
SELECT MIN(id) AS id, parent
FROM tablename
GROUP BY parent
) AS t22 ON t22.id = t1.id AND t1.parent = t22.parent
INNER JOIN tablename AS t2 ON t1.parent = t2.id;
ここで実際にそれを見てください:
これにより、次のことが得られます。
| PARENT | NAME | VALUE |
-------------------------
| 1 | aaa | 111 |
| 3 | ccc | 333 |
または:最小値で取得できます:
SELECT
t1.parent,
t2.name,
MIN(t1.value) AS value
FROM tablename AS t1
INNER JOIN tablename AS t2 ON t1.parent = t2.id
GROUP BY t1.parent, t2.name;
実際に見てみましょう:
これにより、次のことが得られます。
| PARENT | NAME | VALUE |
-------------------------
| 1 | aaa | 111 |
| 3 | ccc | 333 |