#sql #select #reference
Вопрос:
Мне нужно знать, могу ли я каким-либо образом ссылаться на значение столбца в том же контексте запроса.
В этом примере я определяю значение «сумма» во втором вложенном select
и пытаюсь получить к нему доступ в первом вложенном select
.
Я получаю Reference 'amount' not supported (forward reference in item list)
Я знаю, что если я сначала определю «количество» в списке столбцов, это сработает, но это изменит порядок, повлияв на целевые таблицы.
select
col_1,
col_2,
(select if(amount >= 0, 'debit', 'credit')),
col_3,
(select json_value((select json from table), '$.key.val')) as amount,
col_4
from my_table;
Могу ли я каким-либо образом присвоить значение, доступное в контексте запроса, независимо от порядка?
Я хочу избежать дублирования кода и сделать запрос более эффективным, избегая избыточных вычислений.
Ответ №1:
Выполните часть json в производной таблице (т. Е. подзапрос).:
select
col_1,
col_2,
case when amount >= 0 then 'debit' else 'credit' end,
col_3,
amount,
col_4
from
(
select
col_1,
col_2,
col_3,
json_value(_json, '$.key.val') as amount,
col_4
from my_table
) dt
Комментарии:
1. Часть JSON также выбрана из другой таблицы, спасибо за вопрос, отредактировал сообщение
2. Понятно, тогда я бы ПРИСОЕДИНИЛСЯ.