SQLite引用另一列中的命名列

时间:2017-09-01 13:23:26

标签: sql sqlite

我遇到的情况是我正在使用命名列:

SELECT title, SUBSTR(title, 1, 2) as nameprefix FROM employees

现在的问题是,我想添加另一个命名列,并以某种方式引用其中的nameprefix。这可能吗?基本上我想这样做:

SELECT title, SUBSTR(title, 1, 2) as nameprefix, 
(CASE WHEN nameprefix = 'Dr' THEN 'FOUND' ELSE 'NOPE' END) as flag 
FROM employees

它抱怨错误:Error: no such column: nameprefix。实际的用例涉及复杂的子查询,我希望能够重复使用他们的结果,而不是在每个需要结果的列中复制这些子查询。

3 个答案:

答案 0 :(得分:1)

这是可能的:

select title, nameprefix from 
(
    select title, SUBSTR(title, 1, 2) as nameprefix FROM employees
)
where nameprefix = 'Dr'

答案 1 :(得分:0)

您可以在选择中使用别名,您必须重复代码

 SELECT title, SUBSTR(title, 1, 2) as nameprefix, 
 CASE WHEN  SUBSTR(title, 1, 2)= 'Dr' THEN 'FOUND' ELSE 'NOPE' END  as flag 
 FROM employees

使用子选择,例如:in join

 SELECT title, t.nameprefix , 
 CASE WHEN  nameprefix = 'Dr' THEN 'FOUND' ELSE 'NOPE' END  as flag 
 FROM employees
 JOIN (select id, SUBSTR(title, 1, 2) as nameprefix 
          FROM employees ) t on t.id = employees.id

答案 2 :(得分:0)

听起来您希望查看该表,好像title字段的前两个字符被视为一个单独的命名列。因此,我使用CREATE VIEW来构建该视图,然后对其进行查询,而不是针对基础表。

因此,在您的情况下,发出类似

的内容
CREATE VIEW EmployeesWithCols (Name, Title, NamePrefix) AS 
   SELECT Name, Title, SUBSTR(title, 1, 2) FROM Employee

现在,只需使用employee替换原始查询中的表格employeeswithcols,您就会神奇地拥有一个新的NamePrefix列。当然,您在视图中可能还需要一些额外的列。

作为旁注,我通常将视图命名为仅用于将虚拟计算列添加到具有表名和前缀的单个表中的视图" Ex" (根据许多内部Windows功能)但在这种情况下以及许多其他情况下,如果您对编写视图名称的字母大小写不严谨,则命名约定已经成熟,可能会令人尴尬。