mysql внутреннее соединение, вызывающее умножение - PullRequest
2 голосов
/ 01 июля 2011

в основном у меня есть такая структура:

  • Сделка имеет и принадлежит многим каналам
  • Сделка имеет много сделокПродажи
  • Сделка принадлежит каналу

Когда я хочу найти сумму, проданную по сделке, я использую этот запрос:

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
WHERE targets.approved = 1 AND targets.active = 1
GROUP BY targets.id

все работает нормально, проблема в том, когда мне нужно отфильтровать по каналу, найти проданную суммусделкой в ​​канале:

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
**INNER JOIN channels_deals ON channels_deals.deal_id = deals.id**
WHERE targets.approved = 1 AND targets.active = 1
GROUP BY targets.id

Когда я добавляю таблицу присоединения к каналам, amount_sold умножается на каждый канал, с которым связана сделка.Как я могу избежать этого?

Ответы [ 2 ]

0 голосов
/ 01 июля 2011

Используйте IN или Exists

, например,

SELECT targets.id,SUM(deal_sales.amount_sold) AS amount_sold
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 

WHERE targets.approved = 1 AND targets.active = 1
  and 
   deals.id IN (SELECT deal_id from channels_deals where something = 1)
GROUP BY targets.id
0 голосов
/ 01 июля 2011
Try this:

SELECT channels_deals.deal_id,SUM(deal_sales.amount_sold) AS amount_sold
FROM deal_sales 
INNER JOIN deals ON deals.id = deal_sales.deal_id 
INNER JOIN targets ON deals.target_id = targets.id 
INNER JOIN channels_deals ON channels_deals.deal_id = deals.id
WHERE targets.approved = 1 AND targets.active = 1
GROUP BY channels_deals.deal_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...