【问题标题】:Query that display father, son in one column在一列中显示父亲、儿子的查询
【发布时间】:2014-01-13 20:56:33
【问题描述】:

我使用 MySQL

在我的数据库中,我有这张表:

+-----------------------------+
| ID    NAME        ID_FATHER |
+-----------------------------+
| 1     Mylodi      0         |
| 2     Jack        0         |
| 3     Linda       1         |
| 4     Mark        2         |
| 5     Simon       4         |
| 6     Sacha       1         |
| 7     Edward      1         |
+-----------------------------+

通过这个查询,我检索了他父亲的每个名字:

select f.name as father, s.name as son from family s, family f where s.id_father = f.id

结果

+------------+---------+
| father     | son     |
+------------+---------+
| mylodi     |  linda  |
| Jack       |  mark   |
| mark       |  simon  |
| mylodi     |  sacha  |
| mylodi     |  edward |
+------------+---------+

但是,我的问题是如何得到这个结果,但是在这样的一列中:

+--------+
| colum  |
+--------+
| Mylodi |
| linda  |
| sacha  |
| edward |
| jack   |
| mark   |
| simon  |
+--------+

这意味着我想显示父亲的名字以及他儿子的每个父亲名字的下方。谢谢。

编辑 这是我的数据库structure

【问题讨论】:

  • 你试过什么?这是在查询中使用 ORDER BY 子句的一个相当简单的例子。
  • with Union 如果你把你的数据库结构放在sqlfiddle.com 我们可以帮助你更好
  • @jcho360 :我更新了我的答案
  • 这是一个难题,因为它需要遍历一个树形结构。执行此操作的确切机制取决于数据库。

标签: mysql sql tree


【解决方案1】:

这样的事情怎么样:

SELECT name FROM (
  SELECT id, name, id sort1, id_father sort2 FROM family WHERE id_father = 0
  UNION
  SELECT id, name, id_father, 1 sort2 FROM family WHERE id_father <> 0
) AS v 
ORDER BY sort1, sort2

这是更新后的fiddle

【讨论】:

    【解决方案2】:

    这不是那么简单。它假设数据中没有循环(a是b的父亲,b是a的父亲)

    不确定您使用的是什么数据库,但 Oracle 有分层查询,用于使用“connect by”关键字解决此类问题。

    【讨论】:

    • 我没有亲自做过,但是有很多关于MYSQL中分层查询的帖子可以搜索。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多