TransWikia.com

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

Stack Overflow на русском Asked by findley on February 13, 2021

У меня есть основная таблица и несколько второстепенных. Одной записи из основной таблицы может соответствовать несколько записей из второстепенной. Мне нужно вывести их как единую таблицу, если я просто делаю через 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 Answers

    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

Answered by FatherOfFiveChildren on February 13, 2021

Используйте 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

Answered by Arsen on February 13, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP