SQL избыточные данные при left join

У меня есть основная таблица и несколько второстепенных. Одной записи из основной таблицы может соответствовать несколько записей из второстепенной. Мне нужно вывести их как единую таблицу, если я просто делаю через left join, то у меня выводится куча избыточной, дублирующей информации, которая мне не нужна.

Например:

SELECT * 
FROM in_fileindex_main main
LEFT JOIN in_fileindex_additionaly add ON 
    (main.DocumentNumber = add.DocumentNumber)
LEFT JOIN in_fileindex_applicability app ON 
    (main.DocumentNumber = app.DocumentNumber)
WHERE 1;

То выведется что-то типа:

введите сюда описание изображения

Как видно, add и app таблицы не связаны между собой, они связаны только с основной таблицей main. Можно ли как-то построить запрос, чтобы не было дублирующей информации и вывод был соответственно следующим: введите сюда описание изображения


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

Автор решения: Arsen

Используйте DISTINCT или просто можно сделать GROUP BY по ID (как пример GROUP BY main.id ). Но оптимальнее сделать DISTINCT т.к это сэкономит серверные ресурсы.

SELECT DISTINCT * FROM in_fileindex_main main LEFT JOIN in_fileindex_additionaly add ON (main.DocumentNumber = add.DocumentNumber) LEFT JOIN in_fileindex_applicability app ON (main.DocumentNumber = app.DocumentNumber) WHERE 1

UPDATE v.2

SELECT DISTINCT main.* FROM in_fileindex_main as main LEFT JOIN in_fileindex_additionaly as add ON (main.DocumentNumber = add.DocumentNumber) LEFT JOIN in_fileindex_applicability as app ON (main.DocumentNumber = app.DocumentNumber) WHERE 1
→ Ссылка
Автор решения: FatherOfFiveChildren
    select c.name, m.pay, cp.cnt from Client c
    left join (select clientID, sum(money) as pay from Pays group by clientID) m on c.clientID = m.clientID
    left join (select clientID, count(productID) as cnt from ClientProducts group by clientID) cp on c.clientID = cp.clientID
→ Ссылка