如何使用if语句从同一个表中选择和连接值

时间:2014-02-20 23:39:37

标签: 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
------------------
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

任何帮助都会得到无可否认的感激和可能的饼干。

1 个答案:

答案 0 :(得分:0)

这里需要的是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