SQL — Ссылка на значение столбца в том же контексте запроса

#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. Понятно, тогда я бы ПРИСОЕДИНИЛСЯ.