SQL group_concat удалить левое соединение - PullRequest
0 голосов
/ 12 октября 2018

У меня есть эти две таблицы

 FunctionName | value
 -------------+---------
 intensity    |  0
 status       |  NULL

и

 FunctionName | StatusName 
 -------------+------------
 status       |  ON        
 status       |  Off         

Я использую этот запрос:

SELECT 
    Functions.FunctionName, Functions.value,
    GROUP_CONCAT(FunctionsWithStatus.StatusName)
FROM
    Functions
LEFT JOIN
    FunctionsWithStatus ON Functions.FunctionName = FunctionsWithStatus.Functionsname

Результат:

Name   | value | group_concat
status | 0     | off,on

Как я также могу получить значение "интенсивности" и получить такой результат:

Name      | value | group_concat
intensity |  0    |  NUll
status    |  0    | off,on

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Ваш запрос некорректен.Вы смешали неагрегированные столбцы с агрегированными столбцами.MySQL рассматривает это как запрос агрегации без group by, который возвращает ровно одну строку.Значения для неагрегированных столбцов получены из неопределенных строк.

Вы должны включить все неагрегированные столбцы в group by (не просто хорошая идея, а стандартный SQL):

select f.FunctionName, f.value, group_concat(fws.StatusName)
from Functions f left join
     FunctionsWithStatus fws
     on f.FunctionName = fws.Functionsname
group by f.FunctionName, f.value;
0 голосов
/ 12 октября 2018

Добавить Group by должен сделать работу:

SELECT Functions.FunctionName,Functions.value,group_concat(FunctionsWithStatus.StatusName)
from  Functions
left join  FunctionsWithStatus on Functions.FunctionName = FunctionsWithStatus.Functionsname
Group by Functions.FunctionName
...