代码之家  ›  专栏  ›  技术社区  ›  ProtectedVoid

SQL-在同一查询上下文中引用列值

  •  0
  • ProtectedVoid  · 技术社区  · 3 年前

    我需要知道是否有任何方法可以在同一查询上下文中引用列值。

    在这个例子中,我在第二个嵌套的 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 回复  |  直到 3 年前
        1
  •  1
  •   jarlh    3 年前

    在中执行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