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