Mysql 如何使用if语句从同一个表中选择和合并值

Mysql 如何使用if语句从同一个表中选择和合并值,mysql,if-statement,concat,Mysql,If Statement,Concat,平躺在办公桌上 我试图在MySQL 5.1数据库中以预先排序的格式从以下数据库中检索数据: id | name | sub ------------------- 1 | cat 1 | 0 2 | cat 2 | 0 3 | cat 3 | 0 4 | sub 1 | 2 上面的“sub”列引用同一表的id,但作为子类别分组。我希望能够基本上导出列表,仅当列表是子类别时才使用CONCAT() 理想情况下,最终输出为: id | name ------------

平躺在办公桌上

我试图在MySQL 5.1数据库中以预先排序的格式从以下数据库中检索数据:

id | name    | sub
-------------------
1  | cat 1   | 0
2  | cat 2   | 0
3  | cat 3   | 0
4  | sub 1   | 2
上面的“sub”列引用同一表的id,但作为子类别分组。我希望能够基本上导出列表,仅当列表是子类别时才使用CONCAT()

理想情况下,最终输出为:

id | name
------------------
1  | cat 1
2  | cat 2
4  | cat 2 - sub 1
3  | cat 3
我无力的尝试让我提出了这样一个可笑的问题,但无济于事:

SELECT c.id AS id,
(case when c.sub > 0 then CONCAT(ca.name, ' - ', c.name) AS name else c.name AS name)
FROM cat c
LEFT JOIN cat ca ON c.sub = ca.id
ORDER BY name ASC

任何帮助都会得到不可否认的感谢,并可能得到cookies。

这里需要的是
左键连接表本身,以获得类别和子类别。
COALESCE()
返回连接的值(如果没有匹配的子类别,则返回
NULL
)或连接的值

SELECT
  s.id,
  COALESCE(CONCAT(c.name, '-', s.name), s.name) AS catname
FROM
  cats s
  LEFT JOIN cats c ON s.sub = c.id
ORDER BY catname ASC

这里有一个例子:

请注意,按照惯例,我们倾向于使用NULL,而不是0来表示孤儿非常感谢!几个小时来我一直在想这个@Dr34k不客气,很乐意帮忙。欢迎来到堆栈溢出。