sql оставил соединение и дублирует в результате - PullRequest
0 голосов
/ 07 февраля 2009

Скажем, у меня есть 2 таблицы, A и B, каждая сущность A может иметь несколько сущностей B, в одном случае, если я хочу получить все B некоторых определенных A, я могу сделать это с помощью простого левого соединения

select A.id aid,B.id bid from A
left join B on B.aid = A.id
where A.id = 1

и он вернет набор результатов как

aid   bid
1     1
1     2
1     3

Как видно из первого столбца, все эти 1 являются своего рода дубликатами. Можно ли изменить оператор SQL, чтобы он мог возвращать результат, подобный

aid    bid
 1      1,2,3

Другими словами, чтобы связать все заявки в одно целое?

Кроме того, что если есть еще одна таблица C, и у каждого A может быть несколько C, как заставить SQL возвращать набор результатов, такой как

 aid    bid    cid
  1     1,2,3   1,2

вместо

 aid     bid    cid
  1       1      1
  1       2      1
  1       3      1
  1       1      2
  1       2      2
  1       3      2 

Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 07 февраля 2009

Какую СУБД вы используете?

Я не могу говорить за других, но в MySQL, начиная с 4.1, вы можете использовать GROUP_CONCAT

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

EG:

select A.id aid, GROUP_CONCAT(DISTINCT B.id) bid from A
left join B on B.aid = A.id
where A.id = 1
GROUP BY a.id
0 голосов
/ 07 февраля 2009

Попробуйте использовать функцию COALESCE.

http://www.sqlteam.com/article/using-coalesce-to-build-comma-delimited-string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...