SQL дублирование строк при объединении (JOIN) нескольких таблиц
В базе данных есть три таблицы: words, phrases и examples. Первая хранить конкретное слова; вторая - фразы с этим словом; третья - примеры с ним. Две последнии относятся к таблице words как один ко многим: одному слову может соответсвовать множество фраз и/или примеров.
Проблема в том, что при попытке объеденить данные из трех этих таблиц при помощи такого запроса
select words.word, examples.eng_example, examples.ru_example, phrases.eng_phrase, phrases.ru_phrase from words
inner join examples on examples."wordId" = words.id
inner join phrases on phrases."wordId" = words.id
на выходе получаю такую таблицу с повторяющимеся строками (они выделены желтым):

Собственно вопрос: почему так происходит? можно ли получить что-то вроде этого?

И что делать если количество строк из examples не равно количеству строк из phrases?
P.S. Использую SQLite
Ответы (1 шт):
Вы уверены, что используете JOIN правильно? Не лучше ли здесь будет использовать OUTER JOIN? Гайд по join
По второму вопросу, посмотрите функцию sql 'Coalesce' Сссылка
Мне кажется у Вас пропущена связь между "фразами" и "примерами", лучше сделать так: во фразах foreign key до id слова, а в примерах foreign key до фразы. Идея в том, чтобы убрать зависимость пример-слово, и перенести ее на таблицу с фразами, хотя на самом деле и это не верно.
Если у Вас подразумевается, что у одного слова есть одна фраза и один пример, сделайте промежуточную таблицу: id | word_id | phrase_id | example_id и выводите из нее данные через LEFT JOIN заменяя null COALESCE, для этой таблицы пропишите foreign key для word_id с параметром ON DELETE CASCADE.
Удачи.