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. Можно ли как-то построить запрос, чтобы не было дублирующей информации и вывод был соответственно следующим:
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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP