Запрос возврата неправильного значения при выполнении INNER JOIN? - PullRequest
0 голосов
/ 23 января 2019

У меня есть три таблицы, к которым я хочу присоединиться для расчета баланса = (покупка - платежи) для определенного (party_id):

  • Сторона (party_id, тип, имя)
  • Покупка (покупка_идентификатор_поставщика, количество, ставка, итог)
  • Платежи (идентификатор платежа, идентификатор_партии, сумма)

Общая сумма покупки с этим идентификатором = 20 000, а общая сумма платежей = 15 000поэтому его баланс должен быть = 5000.После использования этого кода:

SELECT 
    ((sum(purchase.total)) - (sum(payments.amount))) AS Party_Balance 
FROM 
    Purchase 
INNER JOIN 
    Party 
    ON purchase.supplier_id = party.party_id 
INNER JOIN 
    Payments 
    ON party.party_id = payments.party_id 
WHERE 
    payments.party_id = enter_party_id;

Вывод неправильный: 1 000 245 вместо 5 000.

Это то, как я устанавливаю отношение, есть ли отношение, которое должно быть исправлено?tables' relationship

1 Ответ

0 голосов
/ 23 января 2019

Вы должны сделать 2 отдельные группировки таблицы Party:
1-й с Purchase, чтобы получить SUM из total
и второе с Payments, чтобы получить SUM из amount.
Затем присоединитесь к 2 подзапросам и получите Party_Balance:

SELECT pur.party_id,  pur.total - pay.sumamount AS Party_Balance FROM (
  SELECT Party.party_id, SUM(Purchase.total) AS total
  FROM Party INNER JOIN Purchase ON Party.party_id = Purchase.supplier_id
  GROUP BY Party.party_id
) AS pur
INNER JOIN (
SELECT Party.party_id, SUM(amount) AS sumamount
  FROM Party INNER JOIN Payments ON Party.party_id = Payments.party_id
  GROUP BY Party.party_id
) AS pay
on pay.party_id = pur.party_id
...