@Befroman

Как добавить JOIN к UNION'у двух SELECT'ов одной таблицы?

Есть таблица units с колонками id, user, group, amount, multi_id, x,y.
Есть таблица multi с колонками id, value.
Есть запрос для выборки записей из units:
(SELECT id, amount FROM units WHERE group_id = 0 AND x=? AND y=?) UNION (SELECT MIN(id), SUM(amount) as amount FROM units WHERE group!= 0 AND x=? AND y=? GROUP BY group) LIMIT ?,?

Юнион из-за того что группировать надо только юниты которые состоят в группе (group >0), если у какой-то записи group = 0, то её не надо ни с чем группировать. Вопрос в том, как сделать JOIN с этим запросом, надо умножить units.amount на multi.value где units.multi_id сходит с multi.id и возвратить как total_power. Подскажите, пожалуйста, как сделать хороший (быстрый при большом количестве записей) запрос?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 2
@viras777
SELECT
t.id, t.amount, t.amount*multi.value AS total_power
FROM (
SELECT id, amount, multi_id FROM units WHERE group_id = 0 AND x=? AND y=?
UNION (
SELECT g.id, g.amount, units.multi_id
FROM (
SELECT MIN(id) AS id, SUM(amount) as amount FROM units WHERE group!= 0 AND x=? AND y=? GROUP BY group
) g, units
WHERE
g.id = units.id
) t
LEFT JOIN
multi
ON
t.multi_id = multi.id;
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
select * from ( select ... union select) as t1
join t2 on t1....
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы