2014-05-14 34 views
0

我想连接我在查询中找到的结果。问题在于,我正在使用IF声明根据该条目的另一列的值对结果进行别名。你可以GROUP_CONCAT如果SELECT语句的结果

这行之有效

SELECT town 
IF(is_found = 0, name, null) as not_found, 
IF(is_found = 1, name, null) as found 
FROM listing 

但是,如果我想我的组结果包括城市,我需要Concat的名称列表的结果。

我尝试这样做:

SELECT town 
GROUP_CONCAT(IF(is_found = 0, name, null) as not_found) as missing_list, 
GROUP_CONCAT(IF(is_found = 1, name, null) as found) as found_list 
FROM listing 

我收到语法错误。

我该如何生成这样的concat'ed列表,其中结果是有条件的IF语句。

回答

2

as没有进入if。所以,你可以这样做:

SELECT town, 
     GROUP_CONCAT(IF(is_found = 0, name, null)) as missing_list, 
     GROUP_CONCAT(IF(is_found = 1, name, null)) as found_list 
FROM listing 
GROUP BY town; 

我喜欢case超过if(因为它是标准如此可在几乎所有数据库):

SELECT town, 
     GROUP_CONCAT(CASE WHEN is_found = 0 THEN name END) as missing_list, 
     GROUP_CONCAT(CASE WHEN is_found = 1 THEN name END) as found_list 
FROM listing 
GROUP BY town;