Я получаю дубликаты, когда я делаю два LEFT JOINs, чтобы перейти к «event_name» в моем примере ниже. Я получаю 112 случаев, когда он настроен таким образом. Однако, если я избавлюсь от двух линий LEFT JOIN и запустим запрос, я получаю 100 записей без дубликатов. Я попробовал DISTINCT с кодом ниже, но я все еще получаю 112 с дубликатами.Как избежать дубликатов в sql-запросе по трем связанным таблицам
SELECT "cases"."id", "cases"."date", "cases"."name", "event"."event_name"
FROM "cases"
LEFT JOIN "middle_table" ON "cases"."serial" = "middle_table"."m_serial"
LEFT JOIN "event" ON "middle_table"."e_serial" = "event"."ev_serial"
WHERE "cases"."date" BETWEEN '2012-12-11' AND '2012-12-13'
Как я могу определить, что я хочу только точные 100 случаев от «дел», и что я ничего из таблиц в соединяющем производить какие-либо дополнительные строки не хочу?
Спасибо!
Как связаны таблицы? 1: N от 'cases' до' middle_table'? Не могли бы вы рассказать об этом немного? –
Вы могли бы предоставить некоторые тестовые данные? [sql-скрипка] (http://www.sqlfiddle.com) отлично подходит для этого. – Nico
В моем случае я получал дубликаты из-за присоединения к соединению один-ко-многим.Единственное решение, которое я мог найти, это использовать подзапросы. A имеет много Bs. B имеет много Cs и много Ds. D имеет много Es и много Fs. Мне нужно было получить все Bs (соответствующие строке поиска), а также агрегировать все связанные Cs, Es и Fs для каждого совпадения. Я использовал внешнее соединение для получения ABC, затем использовал два подзапроса для агрегирования DE и DF. – bambams