テーブルaとテーブルb(1対多の関係)からレコードを返すはずの次のMySQLクエリと、テーブルcから返された値のカンマ区切りリストが得られました。しかし、テーブルCには常にレコードが存在するとは限りません(これが、テーブルAにLEFT OUTER JOINを使用している理由です)。それは2レコード1は、表Cに3つの一致するレコードを有する返すべき場合group_concatのヌル値を返した行が返されない
SELECT `a`.`id` , `a`.`name` , `b`.`id` AS `b_id` , `b`.`name` AS `b_name` , GROUP_CONCAT( `c`.`l_id`) AS `c_ls`
FROM `a`
INNER JOIN `b` ON `a`.`b_id` = `b`.`id`
LEFT OUTER JOIN `c` ON `a`.`id` = `c`.`a_id`
GROUP BY `a`.`id`
ORDER BY `a`.`created` DESC
上記クエリが1つのレコードを返し、レコード2は、表Cに0一致するレコードを有します。
クエリが返します。
id | name | b_id | b_name | c_ls
1 | John | 2 | Bla | [BLOB - 3 B]
私はGROUP_CONCATとGROUP_BY条項を削除した場合、それは2つのレコードを返します。
id | name | b_id | b_name | c_ls
1 | John | 2 | Bla | [BLOB - 3 B]
2 | Fred | 3 | Blo | [BLOB - NULL]
c_lsがnullの場合、GROUP_CONCATがあることから行を停止しているようです戻ってきた。私が間違ってやっていることに関する考えは?
SELECT `a`.`id` , `a`.`name` , `b`.`id` AS `b_id` , `b`.`name` AS `b_name` , ISNULL(GROUP_CONCAT( `c`.`l_id`), '') AS `c_ls`
FROM `a`
INNER JOIN `b` ON `a`.`b_id` = `b`.`id`
LEFT OUTER JOIN `c` ON `a`.`id` = `c`.`a_id`
GROUP BY `a`.`id`
ORDER BY `a`.`created` DESC
追加ISNULLはGROUP_CONCATがnullであるかどうかをチェックし、代わりにNULL
の空白返すために -
おかげで、完璧に働きました! – RichW
クエリロジックが 'ISNULL() 'の代わりに' coalesce(field_name、' ') 'を使用するほうが良いでしょう。 – sakhunzai
これは'ネイティブ関数' isnull ' –