MySQL GROUP_CONCAT против COALESCE относительно значений NULL

UPDATE

Я просто заметил, что на сервере столбецtable3.note значенияNULL и на моей локальной машине они пустые строки. После этого смущающего открытия я провел некоторое тестирование, и все работает одинаково на обеих платформах.

И это то, что они производят, если у меня есть две ячейки, а вторая содержит фактическое значение (перваяNULL):

//1st
GROUP_CONCAT(COALESCE(`table3`.`note`, '') SEPARATOR ';') AS `table3_note`
//var_dump(): array(2) { [0]=> string(0) "" [1]=> string(4) "Test" } 

//2nd
GROUP_CONCAT(`table3`.`note`) SEPARATOR ';') AS `table3_note`
//var_dump(): array(1) { [0]=> string(4) "Test" }

Итак, 1-й запрос (COALESCE) восстанавливаетNULLs как пустые строки и вторые полосы всеNULL значения из набора результатов. (Это неприемлемо, потому что у меня много массивов, и они должны быть синхронизированы.)

Первоначальная проблема решена из-за моей ошибки. Я все еще хотел бы знать, почемуGROUP_CONCAT игнорируемыхNULLс, даже если проверено.

Вот запрос, который работает должным образом (не удаляетNULLs):

SELECT `table1`.*
  GROUP_CONCAT(COALESCE(`table3`.`id`, '') SEPARATOR ';') AS `t3_id`,
  GROUP_CONCAT(COALESCE(`table3`.`note`, '') SEPARATOR ';') AS `t3_note`,
  FROM `table1`
    LEFT JOIN `table3` ON `table3`.`id` = `table1`.`id`
      GROUP BY `table1`.`id`

Так почему этот игнорируетNULLs? (Больше параметров запроса, которые игнорируютNULL значения указаны в оригинальном разделе вопросов.)

SELECT `table1`.*
  GROUP_CONCAT(`table3`.`id` SEPARATOR ';') AS `t3_id`,
  GROUP_CONCAT(`table3`.`note` SEPARATOR ';') AS `t3_note`,
  FROM `table1`
    LEFT JOIN `table3` ON `table3`.`id` = `table1`.`id`
      GROUP BY `table1`.`id`
Original question (not important, my bad...)

Часть моего запроса, которая использует три таблицы (отношение 1: n, я отображаю несколько строк изtable2 а такжеtable3 в одиночкуtable1 строка). Две альтернативы для извлечения одного значения ячейки:

 //1st
 GROUP_CONCAT(COALESCE(`table3`.`note`, '') SEPARATOR ';') AS `table3_note`

 //2nd
 GROUP_CONCAT(`table3`.`note`) SEPARATOR ';') AS `table3_note`

Оба прекрасно работают на локальном компьютере, но только первый на сервере. На моей локальной машине я получаю правильное количество пустых значений массива при использовании 1-й или 2-й опции (используяvar_dump()). На сервере 2-й вариант возвращает только пустой массив, если нет значений ни на одномtable3_note (Здесь очень многоtable3_ids и другие поля, не показанные в запросе).

So the question is why? Обе функции претендуют на возвратNULL если в руководстве отсутствуют ненулевые значения.

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

Является ли следующая информация релевантной или я что-то упустил из руководства?

Local machine: MySQL Client API version 5.1.44 Server: MySQL Client API version 5.0.51a

Является ли ответ настолько простым, что сервер обрабатываетCOALESCE функционировать как моя локальная машина, ноGROUP_CONCAT функция обрабатывается по-разному из-за несовпадающих версий MySQL Client API?

Теперь у меня есть рабочее решение, так что это не настоящий вопрос в том смысле, что мне нужно это исправить. Я просто хотел бы знать, почему это так. И есть ли подводные камни в использованииCOALESCE как я использую? Существует ли опасность того, что массивы не синхронизируются должным образом при печатиfor цикл? (По крайней мере, быстрое тестирование не выявило проблем.)

Финальные заметки. Я пытался использовать эти и некоторые другие методы (IFNULL, IS NULL и т. д.) как предложено, например, в следующих вопросах:

GROUP_CONCAT return NULL if any value is NULL Rows with null value for group_concat not returned

Но результат был тот же: работает на локальной машине, а не на сервере. Запросы ниже:

//another option for the query
IF(SUM(`table3`.`note` IS NULL) = 0, GROUP_CONCAT(`table3`.`note` SEPARATOR ';'), NULL) AS `table3_note`

//and another one...
ISNULL(GROUP_CONCAT(`table3`.`note` SEPARATOR ';'), '') AS `table3_note`

MySQL руководство также говорит:

Unless otherwise stated, group functions ignore NULL values.

Это значитCOALESCE не игнорируетNULL такие значения, какGROUP_CONCAT делает, даже если проверено? Это по-прежнему не объясняет различного поведения сервера и локального компьютера. Или это?

Ответы на вопрос(1)

Ваш ответ на вопрос