Как научиться решать такие задачи по sql?
Схема базы данных
Фирма имеет несколько пунктов приема вторсырья. Каждый пункт получает деньги для их выдачи сдатчикам вторсырья. Сведения о получении денег на пунктах приема записываются в таблицу:
Income_o(point, date, inc)
Первичным ключом является (point, date). При этом в столбец date записывается только дата (без времени), т.е. прием денег (inc) на каждом пункте производится не чаще одного раза в день. Сведения о выдаче денег сдатчикам вторсырья записываются в таблицу:
Outcome_o(point, date, out)
В этой таблице также первичный ключ (point, date) гарантирует отчетность каждого пункта о выданных деньгах (out) не чаще одного раза в день.
Задача
В предположении, что приход и расход денег на каждом пункте приема фиксируется не чаще одного раза в день [т.е. первичный ключ (пункт, дата)], написать запрос с выходными данными (пункт, дата, приход, расход). Использовать таблицы Income_o и Outcome_o.
Решение
SELECT t1.point, t1.date, inc, out
FROM income_o t1 LEFT JOIN outcome_o t2 ON t1.point = t2.point
AND t1.date = t2.date
UNION
SELECT t2.point, t2.date, inc, out
FROM income_o t1 RIGHT JOIN outcome_o t2 ON t1.point = t2.point
AND t1.date = t2.date
Решение не очевидное, задача сложная.
Как научиться решать такие сложные задачи по sql?
т.е. с основами sql я знаком, знаю как строить подзапросы, соединять таблицы join, union,
но иногда задачи подобные этой сложно решить.
Есть ли учебник, где на пальцах объясняются алгоритмы sql и способы решения для новичков?
P.S.
SELECT point, date, sum(inc) inc, sum(out) out
FROM (
SELECT point, date, inc, NULL out
FROM income_o
UNION ALL
SELECT point, date, NULL, out
FROM outcome_o
) x
GROUP BY point, date