0

考虑一个表和同一个表的视图。

CREATE TABLE t (a VARCHAR(10), b VARCHAR(10), c VARCHAR(10))

我有一个针对带有两个 where 子句的表运行的查询。

SELECT * FROM t WHERE b = "foo" AND c="bar"

我想创建视图,以便可以使用相同的查询,但忽略两个 where 子句之一。

这可能吗(我怀疑不是)?

喜欢

CREATE VIEW v AS SELECT a, b, [whatever is asked for in the query] AS c FROM t;

(原因是不能修改查询而不是创建一个新视图。)

4

2 回答 2

0

由于数据库视图只能用于定义投影和从一个或多个表中检索投影的条件,因此您不能在视图定义中包含仅选择项目的某些部分或仅选择某些过滤器的条件逻辑。这些只能在视图定义之上指定,例如

SELECT <subset of projection> from <VIEW>

或者

SELECT * FROM <VIEW> WHERE <more filters>
于 2012-10-08T02:59:42.293 回答
0

我认为您自己给出了唯一的解决方案。如果您知道 WHERE 子句中要求的内容,您可以查看该条件始终为真的情况:

CREATE VIEW v AS
SELECT a, b, "bar" AS c FROM t;

如果值c是有限的,你可以摆脱这样的事情:

CREATE VIEW v AS
SELECT a, b, "bar" AS c FROM t;
UNION
SELECT a, b, "bar1" AS c FROM t;
UNION
SELECT a, b, "barsomething" AS c FROM t;
于 2012-10-08T03:02:25.997 回答