如何在SQL中的Where子句中使用View元素

时间:2017-01-23 13:30:04

标签: sql sql-view

我在数据库视图中有这个元素:

  CASE
    WHEN Type = 'Reserved' THEN CAST(1 AS bit)
    ELSE CAST(0 AS bit)
  END AS isReserved,

我想在WHERE子句中使用isReserved列。我怎样才能做到这一点?感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用CROSS APPLY ... VALUES(在SQL Server中 - 没有注意到它没有被标记为任何特定的DBMS)

SELECT isReserved
FROM   YourTable
       CROSS APPLY (VALUES(CASE WHEN Type = 'Reserved' THEN CAST(1 AS BIT)
                            ELSE CAST(0 AS BIT)
                           END)) CA(isReserved)
WHERE  isReserved = 1 

但是你最好直接在你的WHERE子句中使用Type = 'Reserved'等,而不是反过来引用CASE结果。这样它就可以使用索引了。

答案 1 :(得分:1)

你不能直接这样做。

要么包含子查询。

SELECT *
FROM (SELECT <something> as newAlias FROM YourTable) as T
WHERE T.newAlias = ....

或只是重复定义

SELECT *
FROM YourTable
WHERE <something> = ....

答案 2 :(得分:1)

你可以在where子句中使用相同的表达式,oracle sql不会再次计算它,它会从缓存中获得结果

{{1}}