@smigles

Как сделать выборку из нескольких таблиц с конкатенацией?

Создаю словарь японского языка. Есть три таблицы с такими полями:
entries
id	word
1	word1
2	word2

readings
id	entry_id	reading
1	1		reading1
2	1		reading2
3	2		reading3

meanings
id	entry_id	meaning
1	1		meaning1
2	2		meaning2
3	2		meaning3

Таблица entries содержит слова. В таблицах readings и meanings даются чтения и значения этих слов соответственно. Чтений и значений может быть несколько, поэтому они выделены в отдельные таблицы, которые содержат поле entry_id, соответствующее полю id из таблицы entries.

Для организации поиска возникла необходимость объединить всё в одну таблицу вида:
id	word	readings		meanings
1	word1	reading1 reading2	meaning1
2	word2	reading3		meaning2 meaning3

Таким образом, помимо собственно объединения таблиц, нужно несколько чтений и значений слов соединить конкатенацией, разделив их пробелом.

Какой SQL-запрос можно написать, чтобы такое реализовать?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@smigles Автор вопроса
Основываясь на предыдущем ответе, пришёл к такому запросу:
SELECT entries.id, entries.entry, GROUP_CONCAT(DISTINCT readings.reading SEPARATOR '; ') AS readings, GROUP_CONCAT(DISTINCT meanings.meaning SEPARATOR '; ') AS meanings
FROM entries
LEFT JOIN (readings, meanings) ON (readings.entry_id = entries.id AND meanings.entry_id = entries.id)
GROUP BY entries.id

5c31298804831378376300.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
be_a_dancer
@be_a_dancer
Backend/Fullstack Developer
Естественно, для объединения таблиц используются JOIN-ы. Пример кода.

SELECT entries.id, entries.word, GROUP_CONCAT(readings.reading) AS readings, GROUP_CONCAT(meanings.meaning) AS meanings
FROM entries
LEFT JOIN readings ON entries.id=readings.id
LEFT JOIN meanings ON entries.id=meanings.id


В синтаксисе мог допустить небольшие ошибки: запрос не проверял. Но в общем и целом, он будет выглядеть примерно так.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы