办公日公寓。
我正试图在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

任何帮助都会得到不可否认的感激之情,并有可能得到饼干。

最佳答案

这里需要的是LEFT JOIN针对表本身获取类别和子类别。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

下面是一个例子:http://sqlfiddle.com/#!2/201b1/8

关于mysql - 如何使用if语句从同一表中选择和合并值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21922144/

10-10 19:32