Пояснения: В основном это 2D-сетка.Как передать значение столбца в «вложенный» подзапрос
Цель: рассчитать сумму бонусов (зеленых ячеек) в определенном диапазоне (красный квадрат) вокруг определенных мест (синие ячейки).
NB: координаты могут быть отрицательными.
Синие ячейки являются конкретными местами и находятся в таблице T1.
Таблица Т1:
x, y
Зеленые клетки бонусы с различными значениями в определенных координатах и приведены в таблице T2.
Таблица Т2:
x, y, bonus
Чтобы вычислить окончательный бонус, SUM зеленые бонусы (LIMIT 3, заказанного БОНУСНОЙ DESC) от T2, которые находятся в пределах квадрата размером 7 на 7, центрированный на синем клетке от Т1.
В этом примере ответ (расчетный бонус) для этой голубой ячейки будет 20 + 15 + 10.
Я вроде новой для соединения и подзапросы в MySQL, так что это действительно сложно для меня, чтобы объяснить вам, что эта проблема, так что я буду показывать в основном код.
Ниже мой запрос. Это работает, потому что я принудительно меняю координаты в подзапросе (см. -10 и -100), но мне нужно заменить эти значения -10 и -100 на c.x и c.y.
Проблема в том, что я не могу использовать 'c'.
Я получаю следующую ошибку: Неизвестный столбец 'c.x' в 'where clause'.
SELECT
c.x,
c.y,
(
SELECT Sum(bonus) AS bonus
FROM
(
SELECT bonus
FROM t2
WHERE Abs(-10 - x) <= 3
AND Abs(-100 - y) <= 3
ORDER BY bonus DESC
LIMIT 3
) AS sub
) AS bonus
FROM t1 AS c
Затем я попытался с CROSS JOIN, та же проблема.
SELECT
c.x,
c.y
FROM t1 AS c
CROSS JOIN
(
SELECT Sum(bonus) AS bonus
FROM
(
SELECT bonus
FROM t2
WHERE Abs(-10 - x) <= 3
AND Abs(-100 - y) <= 3
ORDER BY bonus DESC
LIMIT 3
) AS sub
) AS b
NB:
- Это будет работать, если бонусная запрос не имел, подзапрос, но я должен использовать один , потому что мне нужен предел и предел применяется после того, как сумма, если вы не используйте подзапрос.
- Решение было бы сделать это с несколькими запросами.
- Я также пробовал с псевдонимами, но с той же проблемой.
@Strawberry Я добавил некоторую информацию. Но в следующий раз было бы неплохо спросить по-другому. – Ploppy
Было бы хорошо предоставить запрошенную информацию. – Strawberry
@Strawberry Это ты, кто ниспроверг? – Ploppy