MySQL 获取父级和所有子级

标签 mysql

我的数据库看起来像:

父级:

+----+-------+
| ID | Name  |
+----+-------+
|  1 | Stage |
|  2 | Prod  |
+----+-------+

children :

+-------+-------+--------+
| Name  | Value | Parent |
+-------+-------+--------+
| Bob   |    10 |      1 |
| Smith |     5 |      1 |
| Jack  |     3 |      1 |
| Bob   |    10 |      2 |
| Smith |     5 |      2 |
| Jack  |     3 |      2 |
| Black |     2 |      2 |
+-------+-------+--------+

如何通过使用不同的子名称作为查询的一部分来查询父项?

如果我想获取父 ID 1 以及父 ID 的所有 child ,我如何在查询中使用“Bob”、“Smith”和“Jack”来获取父 ID 1,而不是父 ID 2。

编辑:我不认为这是重复的,因为另一个问题的解决方案将匹配父 ID 1 和 2,因为它们除了 1 之外还有相同的子 ID

最佳答案

您可以使用GROUP_CONCAT:

SELECT ID, Name
FROM (
  SELECT p.ID, p.Name, GROUP_CONCAT(c.Name ORDER BY c.Name) AS children
  FROM Parent AS p
  INNER JOIN Children AS c ON p.ID = c.Parent
  GROUP BY p.ID, p.Name) AS t
WHERE t.children = 'Bob,Jack,Smith'

这将返回具有这些 ('Bob,Jack,Smith') child 的所有 parent 。

关于MySQL 获取父级和所有子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33876935/

相关文章:

php - 如何为用户设置架构以授权访问某些信息?

php - MySQL 文件出现错误 1064

mysql - SQL语法: delete several rows with values (id)

javascript - 如何在数据库列中插入td的值

mysql - 一个 SQL 查询可以从多对多关系中获取一行吗?

mysql - 如何创建 MySQL 查询以获得不同年份的结果?

mysql - hibernate MySQL 522 错误

mysql - 将序列号添加到特定于 ID MySQL 的现有数据

php - 如何使用 PHP 为 MySQL 表中的每一行重新分配 AUTO_INCREMENT 列

mysql - 如何编写 MySQL 查询来查找外键实体是否存在?