父/子在同一张桌子

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 |

【讨论】:

以上是关于父/子在同一张桌子的主要内容,如果未能解决你的问题,请参考以下文章

如何使用父/子在javascript中选择正确的div

三张桌子在同一个窗口,iPad

在同一张桌子上加入两次的最佳方式是啥?

Vue cli 3道具(父到子)子在父变量更改后永远不会更新

多个用户在同一张桌子上

Laravel 在同一张桌子上返回父母的孩子