@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-запрос можно написать, чтобы такое реализовать?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 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
Junior/Middle Full Stack 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


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

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

Войти через TM ID
Похожие вопросы
SaveTime Москва
от 140 000 до 200 000 руб.
Интерно Ростов-на-Дону
от 35 000 до 50 000 руб.