Я создаю приложение, которое динамически генерирует sql для поиска строк определенной таблицы (это основной класс домена, как Employee).
Существует три таблицы Table1, Table2 и Table1Table2Map.
Table1 имеет много-много взаимосвязей с Table2 и отображается через таблицу Table1Table2Map. Но так как Таблица 1 - моя главная таблица, отношения практически похожи на один со многими.
Мое приложение генерирует sql, который в основном дает набор результатов, содержащий строки из всех этих таблиц. Предложение select и join не изменяются, тогда как предложение where генерируется на основе взаимодействия с пользователем. В любом случае я не хочу дублировать строки таблицы 1 в моем наборе результатов, так как это основная таблица для отображения результатов. Сейчас генерируемый запрос выглядит так:
select distinct Table1.Id as Id, Table1.Name, Table2.Description from Table1
left outer join Table1Table2Map on (Table1Table2Map.Table1Id = Table1.Id)
left outer join Table2 on (Table2.Id = Table1Table2Map.Table2Id)
Для простоты я исключил предложение where. Проблема в том, что в Table2 есть несколько строк для Table1, хотя я и сказал отдельно от Table1.Id в наборе результатов есть повторяющиеся строки в Table1, так как он должен выбрать все подходящие строки в Table2.
Для более подробного рассмотрения учтите, что для строки в Table1 с Id = 1 есть две строки в Table1Table2Map (1, 1) и (1, 2), сопоставляющие Table1 с двумя строками в Table2 с идентификаторами 1, 2. Выше упомянутый запрос возвращает повторяющиеся строки для этого случая. Теперь я хочу, чтобы запрос возвращал строку таблицы 1 с идентификатором 1 только один раз. Это связано с тем, что в Таблице 2 есть только одна строка, похожая на активное значение для соответствующей записи в Таблице 1 (эта информация находится в таблице отображения).
Есть ли способ избежать дублирующихся строк в Таблице 1.
Я думаю, что в том, как я пытаюсь решить проблему, есть какая-то основная проблема, но я не могу выяснить, что это такое. Заранее спасибо.