Есть 2 таблицы. В обеих таблицах есть столбцы для точек и идентификатора пользователя. Хотите суммировать все баллы для конкретного пользователя в одной таблице, затем суммировать в другой и вычитать из общей суммы одной таблицы, общей суммы из другой таблицы. Имейте 2 решения (а также здесь http://sqlfiddle.com/#! 9 / f040a2 / 1 разместил мои тесты). Пожалуйста, совет, который лучше для производительности.
Первое решение. Очень ясно и кажется без "проблем"
SELECT
( SELECT SUM(`PurchasedPoints`) FROM `first_table` WHERE `Id` = ? )
-
( SELECT SUM(`SpendPoints`) FROM `second_table` WHERE `Id` = ? ) AS `RemainingPaidPoints`
Другое решение с LEFT JOIN
. Где-то читал, что LEFT JOIN
лучше по производительности, чем подзапросы. Но код выглядит сложным и не уверен, разумно ли его использовать.
SELECT SUM(`Ft`.`PurchasedPoints`) - `St`.`SpendPoints` AS `RemainingPaidPoints`
FROM `first_table` `Ft`
LEFT JOIN (
SELECT SUM(`SpendPoints`) AS `SpendPoints`, `Id` FROM `second_table` WHERE `Id` = ?
GROUP BY `Id`
) `St` ON `Ft`.`Id` = `St`.`Id`
WHERE `Ft`.`Id` = ?
GROUP BY `Ft`.`Id`
С обоими получаются одинаковые результаты, но ... что лучше для производительности и c., Пожалуйста?