Как создать запрос для связи many-to-many

Есть таблица Word

id (int)
word (text)

Есть таблица PartsOfSpeech

id (int)
name (text)

Связал связанную таблицу Combinations. Занёс данные

id (int)
word_id (int)
ps_id (int)

Теперь стоит задача вывести все в единую таблицу. Пробовал через Union, но оно просто в столбик все данные вводит. А мне нужно чтобы было Word | PartsOfSpeech

SELECT p.*  FROM word p
union 
select ps.* from partsOfSpeech ps

Ответы (1 шт):

Автор решения: Alex R.

Если требуется вывести все введенные пары, то это обычное связывание таблиц

select
  с.id,
  w.name word,
  ps.name PartsOfSpeech
from Combinations c,
     PartsOfSpeech ps,
     word w
where c.word_id = w.id
and   c.ps_id = ps.id 

Если требуется все варианты для слова, то

select
  w.id,
  w.name word,
  GROUP_CONCAT(ps.name,'; ') PartsOfSpeechs
from Combinations c,
     PartsOfSpeech ps,
     word w
where c.word_id = w.id
and   c.ps_id = ps.id 
group by w.name

Если не для всех слов есть записи в Combinations, а слова надо вывести все, то необходимо использоватьLEFT JOIN.

→ Ссылка