【问题标题】:SQLITE "no such column" if created by "AS"如果由“AS”创建,SQLITE“没有这样的列”
【发布时间】:2013-10-11 10:01:59
【问题描述】:

我正在 SELECT 子句中创建一个临时列,如下所示:

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col 
FROM foo

现在我可以使用“my_col”访问和排序结果,即

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col 
FROM foo 
ORDER BY my_col

但是当我想要这样扩展列时

SELECT *, 
       CASE WHEN a THEN 1 ELSE 0 END AS my_col, 
       my_col * 5 AS my_col_2 
FROM foo

SQLite 产生“没有这样的列:my_col”。

那么如何在查询中使用临时列来进一步使用?有可能吗?

【问题讨论】:

    标签: sql sqlite select dynamic-columns


    【解决方案1】:

    您可以使用子查询:

    SELECT X.my_col, X.my_col * 5 AS my_col_2
    FROM (
         SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col FROM foo
         ) X
    ORDER BY X.my_col
    

    或者只是重复case语句:

    SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col, CASE WHEN a THEN 1 ELSE 0 END * 5 AS my_col_2 FROM fo
    

    【讨论】:

    • 我希望使用该列来避免重复声明。子查询也不起作用,因为在您的示例中 my_col_2 (临时列)未使用。但我读到,不可能在 SELECT 中使用虚拟列。它们只能在 WHERE 和 ORDER 中使用。
    【解决方案2】:

    我通过创建视图解决了我的问题:

    CREATE VIEW IF NOT EXISTS foo_view SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col FROM foo
    

    之后我可以根据需要访问包含新列的视图

    SELECT *, my_col FROM foo_view
    

    【讨论】:

      【解决方案3】:
      SELECT *, CASE WHEN a THEN 1 ELSE 0 END AS my_col, CASE WHEN a THEN 1 ELSE 0 END * 5 AS my_col_2 FROM foo
      

      【讨论】:

      • 感谢您的快速答复。当然可以,但这只是我不想采取的方式(因为在我的 App 中,条件很大,我不想包含两次)。
      • 那么最好的选择可能是将它放在子查询中,或者如果您有多个具有相同 CASE 的查询,也许您可​​以创建一个视图来简化您的生活
      【解决方案4】:

      很遗憾,您不能在声明别名的时候使用别名:

      -- this works
      select col c        
      from Table1
      order by c;
      
      -- this works
      select col c
      from Table1
      where c = 1;
      
      -- this won't
      select col c,
             c * 2
      from Table1
      order by c;
      

      你可以和SQLFiddle的人一起玩。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 2020-06-02
        • 1970-01-01
        • 2020-08-16
        • 2017-02-09
        • 2015-09-07
        • 1970-01-01
        相关资源
        最近更新 更多