Вывести результат выборки из 2х таблиц

242
19 мая 2017, 14:56

В БД есть 2 таблицы: Куплено и Продано, в которых записаны соответствующие операции, примерно так :

Столбцы: (Вид товара/Количество)

Строки : (Товар А/200 штук), (Товар А/100 штук), (Товар В/50 штук)

Принцип заполнения актуален и для Продано и для Куплено. В приложении нужно получить выборку : sum(Куплено.Количество) - sum(Продано.Количество).

Иначе говоря из 2х таких таблиц

Куплено

Продано

Нужно получить такую

Осуществить это я пытался таким запросом:

SELECT sum(CountPaper)
FROM custodian.activessale
where OrderNumber = 'ES2890'
group by TitleSalePaper into @res;
SELECT Title, round((sum(PaperCount) - @res),3)
FROM custodian.activesb
where OrderNumber = 'ES2890'
group by Title;

Проблема в том, что более одной строки в таблице Продано вызывают ошибку, а если строка одна, то она и вычитается из всех строк, независимо от того, какой товар был продан. Можно, конечно, завести отдельную таблицу, и туда записывать через Update баланс после покупки или продажи, но если можно через запрос выводить нужное значение, то и таблицы отдельной заводить не нужно. Или вообще приложение само должно все просчитывать. Подскажите как лучше? Можно ли запросом получить корректную таблицу ?

Answer 1

Если я правильно понял, то вам нужен примерно такой запрос:

select b.Title,
    sum(b.PaperCount) - sum(s.CountPaper) as Title_diff
from custodian.activesb b join custodian.activessale s
    on b.Title = s.TitleSalePaper
group by b.Title
Answer 2
SELECT products.product, COALESCE(SUM(purshase.amount),0) - COALESCE(SUM(selling.amount),0) balance
FROM ( SELECT product FROM purshase
       UNION
       SELECT product FROM selling
     ) products
LEFT JOIN purshase on purshase.product = products.product 
LEFT JOIN selling  on selling.product = products.product 
GROUP BY products.product 
Answer 3

Спасибо всем за помощь (особенно @Mike и @Denis) С вашими примерами пришел к следующему коду для Mysql

SELECT `Title`, coalesce(sum(col1),0)-coalesce(sum(col2),0)
FROM (
    SELECT `Title`, `CountPaper` AS col1, NULL AS col2
      FROM activesb where OrderNumber = 'ES2890'
     UNION ALL
    SELECT `Title`, NULL AS col1, `CountPaper` AS col2
      FROM activessale where OrderNumber = 'ES2890'
   ) X
GROUP BY `Title` 

где Title - столбец с названием товара (одинаков для обоих таблиц), CountPaper - количества товара, OrderNumber - фильтр (проводя аналогию с примером, который дал по ссылке @Mike это какой то отдельный магазин из сети) ну а activesb - поступления и activessale - продажи.

READ ALSO
1071 Specified key was too long; max key length is 767 bytes

1071 Specified key was too long; max key length is 767 bytes

На локальном сервере возникает такая ошибка при попытке сменить кодировку и сопоставление таблицы на utf8mb4, а на удаленном - нетПричину ошибки...

260
Ошибка при импорте SQL DUMP

Ошибка при импорте SQL DUMP

Не могу заимпортить в вордпресс wp_posts

579