父/子在同一张桌子
Posted
技术标签:
【中文标题】父/子在同一张桌子【英文标题】:Parent / Child in same table 【发布时间】:2013-04-06 17:45:19 【问题描述】:我的表结构如下:
id |parent|name |value
1 | 0 | aaa |
2 | 0 | bbb |
3 | 0 | ccc |
4 | 1 | | 111
5 | 1 | | 222
6 | 3 | | 333
如果有子记录,我想显示父级。
喜欢:
(父id + name + value 第一个孩子)
1 - aaa - 111
3 - ccc - 333
【问题讨论】:
这个问题没有显示任何研究工作。 做好功课很重要。告诉我们您发现了什么以及为什么它不能满足您的需求。这表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,最重要的是它可以帮助您获得更具体和相关的答案。 FAQ. 【参考方案1】:数据库中第一个孩子没有意义,可以通过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;
在这里查看它的实际效果:
SQL Fiddle Demo这会给你:
| 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;
查看实际操作:
SQL Fiddle Demo这会给你:
| PARENT | NAME | VALUE |
-------------------------
| 1 | aaa | 111 |
| 3 | ccc | 333 |
【讨论】:
以上是关于父/子在同一张桌子的主要内容,如果未能解决你的问题,请参考以下文章