平日当天。
我正在尝试从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
任何帮助都会得到无可否认的感激和可能的饼干。
答案 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