1

私はこのクエリを持っています:

SELECT * 
FROM  `test` t
LEFT JOIN  `result` r ON r.test_id = t.id
LEFT JOIN  `parameter` p ON p.test_id = t.id

戻り値:

id                name   id test_id      description    id test_id          name
 1 test w/o parameters    1       1 the first result  NULL    NULL          NULL
 1 test w/o parameters    2       1 the second result NULL    NULL          NULL
 2 test w/ paramters   NULL    NULL              NULL    1       2  command_line
 2 test w/ paramters   NULL    NULL              NULL    2       2        userid

私が返したいのは:

id                name                             results           parameters
 1 test w/o parameters  the first result,the second result                 NULL
 2 test w/ paramters                                  NULL  command_line,userid

GROUP_CONCAT を機能させようとしましたが、NULL は破棄されます。GROUP_CONCAT に null を返すよう説得する方法はありますか?

私が本当に欲しいのはこのようなものですが、これはすべて間違っています:

SELECT * , group_concat(r.description), group_concat(p.name)
  FROM `test` t 
  left join `result` r on r.test_id = t.id
  left join `parameter` p on p.test_id = t.id

これは非 NULL 行を返します。

SELECT * , group_concat(r.description)
  FROM `test` t 
  LEFT JOIN `result` r on r.test_id = t.id
  LEFT JOIN `parameter` p on p.test_id = t.id
4

1 に答える 1

1

最初にサブクエリで値を連結してから、それらを親テーブル ( DEMO )に結合する方がおそらく簡単です。

SELECT t.id, t.name, r.results, p.parameters
FROM  `test` t
LEFT JOIN  (select test_id, group_concat(result) results
            from `result` r group by test_id) r ON r.test_id = t.id
LEFT JOIN  (select test_id, group_concat(name) parameters
            from `parameter` p group by test_id) p ON p.test_id = t.id;

結果:

| ID |                NAME |                            RESULTS |          PARAMETERS |
---------------------------------------------------------------------------------------
|  1 | test w/o parameters | the first result,the second result |              (null) |
|  2 |   test w/ paramters |                             (null) | command_line,userid |
于 2013-03-20T21:18:39.390 に答える