Использование объединения вместо IN
гарантирует, что каждый элемент x
будет учитываться столько раз, сколько существует записей в y
:
SELECT SUM(cost)
FROM tableX x
JOIN tableY y ON x.prod_id = y.prod_id AND val = 7
Обратите внимание, что этот подход работает только в ситуации, когда вы не хотите получать какие-либо другие столбцы из x
. Если это не так, вам нужно сгруппировать по дополнительным столбцам, которые вы sh вернете:
SELECT x.prod_id, x.name, SUM(cost), COUNT(*)
FROM tableX x
JOIN tableY y ON x.prod_id = y.prod_id AND val = 7
GROUP BY x.prod_id, x.name