是否可以以编程方式编辑 SQLite CREATE VIEW 语句?

Is it possible to programmatically edit a SQLite CREATE VIEW statement?

我有一个包含多个嵌套视图的视图,如下所示。

主视图:

CREATE VIEW `qryAttackRate` AS 
Select qryFoodInCases.fldCaseID,qryFoodInCases.fldFood,
AteAndGotSick,TotalAte,AteAttackRate,
NotAteAndGotSick,TotalNotAte,NotAteAttackRate,
ROUND(AteAttackRate/CAST(NotAteAttackRate AS FLOAT),2) RelativeRisk 
FROM qryFoodInCases
LEFT JOIN qryNotAteAttackRate QA
ON qryFoodInCases.fldFood=QA.fldFood
LEFT JOIN qryAteAttackRate QN
ON qryFoodInCases.fldFood=QN.fldFood
GROUP BY qryFoodInCases.fldFood
ORDER BY  RelativeRisk Desc

这是 2 个子视图。还有几个:

CREATE VIEW `qryAteAttackRate` 
AS SELECT qryFoodInCases.fldCaseID,qryFoodInCases.fldFood,
COALESCE(qryAteAndGotSick.AteAndGotSick,0) AteAndGotSick,
qryFoodInCases.fldFoodFrequency TotalAte,
 100*COALESCE(qryAteAndGotSick.AteAndGotSick,0)/
qryFoodInCases.fldFoodFrequency AteAttackRate
FROM qryFoodInCases
LEFT JOIN qryAteAndGotSick 
ON qryFoodInCases.fldFood=qryAteAndGotSick.fldFood
GROUP BY qryFoodInCases.fldFood


CREATE VIEW `qryFoodInCases` 
AS SELECT tblCases.fldCaseID,fldfood,
COUNT(tblFoodHistory.fldFoodID) AS fldFoodFrequency 
FROM tblFood 
INNER JOIN tblFoodHistory 
ON tblFoodHistory.fldFoodID=tblFood.fldFoodID)
INNER JOIN tblMealHistory 
ON tblFoodHistory.fldMealID=tblMealHistory.fldMealHistoryID)
INNER JOIN tblInterviews 
ON tblInterviews.fldInterviewID=tblMealHistory.fldInterviewID)
INNER JOIN tblCases 
ON tblCases.fldCaseID=tblInterviews.fldCaseID
GROUP BY tblCases.fldCaseID,tblFood.fldFood

我想查询每个 fldCaseID 的主视图。问题是,查询主视图时的 WHERE 条件不适用于子视图。

除了创建长而复杂的 SQL 语句之外,是否可以通过编程方式将 WHERE 条件插入子视图?

为了说明问题,请查看 select * from qryAttackRate where fldcaseid=1 在添加第二个案例之前和之后的输出,而不对与第一个案例相关的数据进行任何更改 之前

+-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+
    | fldCaseID |  fldFood   | AteAndGotSick | TotalAte | AteAttackRate | NotAteAndGotSick | TotalNotAte | NotAteAttackRate | RelativeRisk |
    +-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+
    |         1 | Beans      |             4 |        4 |           100 |                1 |           3 |               33 | 3.03         |
    |         1 | Cabagge    |             2 |        3 |            66 |                3 |           4 |               75 | 0.88         |
    |         1 | fried fish |             2 |        3 |            66 |                3 |           4 |               75 | 0.88         |
    |         1 | Banana     |             1 |        2 |            50 |                4 |           5 |               80 | 0.62         |
    |         1 | Pork       |             2 |        4 |            50 |                3 |           3 |              100 | 0.5          |
    |         1 | Chicken    |             1 |        3 |            33 |                4 |           4 |              100 | 0.33         |
    |         1 | Potatoes   |             0 |        2 |             0 |                5 |           5 |              100 | 0            |
    |         1 | Rice       |             0 |        2 |             0 |                5 |           5 |              100 | 0            |
    +-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+

之后

+-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+
| fldCaseID |  fldFood   | AteAndGotSick | TotalAte | AteAttackRate | NotAteAndGotSick | TotalNotAte | NotAteAttackRate | RelativeRisk |
+-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+
|         1 | Cabagge    |             2 |        3 |            66 |                4 |           7 |               57 | 1.16         |
|         1 | fried fish |             2 |        3 |            66 |                4 |           7 |               57 | 1.16         |
|         1 | Pork       |             2 |        4 |            50 |                4 |           6 |               66 | 0.76         |
|         1 | Potatoes   |             0 |        2 |             0 |                6 |           8 |               75 | 0            |
+-----------+------------+---------------+----------+---------------+------------------+-------------+------------------+--------------+

视图总是在应用外部查询中的任何处理之前计算固定的结果集。 (数据库实际上试图优化掉视图中不需要的处理,但它总是表现得好像视图是提前具体化的。)

无法更改视图(使用参数或任何其他机制)。

如果您的子查询必须动态更改,则不能使用视图。 您必须将它们写成子查询,或者(在 SQLite 3.8.3 或更高版本中)写成 common table expressions.