忽略视图中的条款

时间:2012-10-08 02:31:04

标签: sql view mysqli

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

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;

(原因是无法在创建新视图的情况下修改查询。)

2 个答案:

答案 0 :(得分:0)

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

中选择

SELECT * FROM WHERE

答案 1 :(得分: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;