SQLite:有没有办法为“Where”子句分配别名而不必重复多次?

时间:2014-12-29 17:02:56

标签: sqlite

我有以下表结构:

表:表1

列:Entry,Tag1,Tag2,Tag3,Tag4。

(条目是行号,即1,2,3等)

如果我想在一个查询中将所有标记合并为1,我会执行以下操作:

Select Tag1 FROM Table1 
UNION ALL 
Select Tag2 FROM Table1 
UNION ALL 
Select Tag3 FROM Table1 
UNION ALL 
Select Tag4 FROM Table1;

但是,假设我想要进行上述查询,但仅限于条目介于100和200之间的条目,我将使用以下代码:

Select Tag1 FROM Table1 
  WHERE Entry >= 100 AND Entry <= 200 
UNION ALL 
Select Tag2 FROM Table1  
  WHERE Entry >= 100 AND Entry <= 200 
UNION ALL 
Select Tag3 FROM Table1  
  WHERE Entry >= 100 AND Entry <= 200 
UNION ALL 
Select Tag4 FROM Table1 
  WHERE Entry >= 100 AND Entry <= 200;

有没有什么方法可以简单地第二次查询而不重复“WHERE Entry&gt; = 100 AND Entry&lt; = 200”这么多次?换句话说,如果我必须执行相同类型的操作但是需要将100列标记组合到一个列中并且必须在表中的2个不同条目之间,是否可以显着缩短查询?

1 个答案:

答案 0 :(得分:0)

您可以使用子选择对WHERE子句进行分解:

SELECT Tag FROM (
  SELECT Entry, Tag1 AS Tag FROM Table1 
  UNION ALL 
  SELECT Entry, Tag2 AS Tag FROM Table1  
  UNION ALL 
  SELECT Entry, Tag3 AS Tag FROM Table1  
  UNION ALL 
  SELECT Entry, Tag4 AS Tag FROM Table1 
)
WHERE Entry >= 100 AND Entry <= 200;

在构造查询计划时,一些SQL引擎会将WHERE子句应用回每个查询,但SQLite(当前)不是其中之一,因此以这种方式编写查询会产生效率成本。