Мой заголовок ужасен, и, вероятно, поэтому я не могу найти то, что хочу, в Google.
Что я пытаюсь сделать, так это экспортировать некоторые данные из старого внутреннего блога, чтобы я мог импортировать их во что-то еще. Моя проблема в том, что, хотя я могу создать вид JOIN, который я ищу, совпадение во второй таблице может содержать несколько строк, поэтому я получаю тонны повторяющихся данных. Мне нужно взять результаты из второй таблицы и объединить их (если совпадений несколько) в одно поле в результате запроса. Нет необходимости в ограничении WHERE для запроса, я пытаюсь получить всю таблицу blog_posts.
Надеюсь, эта сокращенная схема структуры таблицы поможет проиллюстрировать:
blog_posts blog_categories
---------------------------------------
post_id post_id
post_content category_id
post_author
А вот и примерные данные.
Данные таблицы blog_posts:
post_id post_content post_author
----------------------------------
1 foo1 bob
2 foo2 bob
3 foo3 fred
Данные таблицы blog_categories:
post_id category_id
--------------------
1 1
1 2
1 6
2 1
3 2
3 4
Мои идеальные результаты выглядели бы так:
post_id post_content post_author category_ids
------------------------------------------------
1 foo1 bob 1,2,6
2 foo2 bob 1
3 foo3 fred 2,4
Самое близкое, что я мог получить, было простое соединение, подобное этому:
SELECT
blog_posts.post_id,
blog_posts.post_content,
blog_posts.post_author,
blog_categories.category_id
FROM blog_posts
INNER JOIN blog_categories
ON blog_posts.post_id = blog_categories.post_id
Но это возвращает совпадения в таблице blog_posts несколько раз (по одному разу для каждого совпадающего идентификатора category_id).
Есть ли способ выполнить то, что я хочу, используя только SQL? Я думаю, что какой-то подвыбор будет работать, но я не могу понять, как это будет работать - я знаю, что, по сути, хотел бы сделать выбор в моем "цикле" для идентификаторов категорий, используя текущий идентификатор сообщения, но синтаксис для этого ускользает от меня. Это не должно быть эффективным, это одноразовая операция.