如何在 SqLite 视图语句上放置 where 条件?

问题描述 投票:0回答:2

是否可以重写以下视图,以便用户可以使用

WHERE
子句(
WHERE overlap > @param
,在下面注释掉)来参数化视图?有可能吗?
where
子句应在
group by
子句之前生效。

我尝试从表中进行选择

vl
并将行(外连接)与语句中的行进行匹配,该语句计入另一个表 (
vlda
)。

CREATE VIEW dr AS
SELECT
    vl.unique_object_id AS unique_object_id,
    ifnull(vlda.detectioncount, 0) AS detectioncount,
    vl.count AS labelcount,
    (1.0*ifnull(vlda.detectioncount, 0) / vl.count) AS detectionrate,
    vlda.evalround_id
    FROM viewlabelcount vl
    LEFT OUTER JOIN 
    (
        SELECT 
            count() as detectioncount,
            unique_object_id, 
            evalround_id
            FROM viewlabeldetections_best
            -- WHERE overlap > 0.5 -- is it possible to parametrize?
            GROUP BY unique_object_id
    ) AS vlda
    ON
        vl.unique_object_id = vlda.unique_object_id
sql sqlite
2个回答
4
投票

SQLite 不允许在存储在模式中的对象(例如视图或触发器)中使用参数。

如果您使用的是 SQLite 3.8.3 或更高版本,您可以将该定义作为 公共表表达式 移动到您的查询中。


0
投票

既然视图不能有参数,视图是否可以有用户定义的函数: 创建视图 xyz 作为 select x,y,z from mytable where z > myfunc(); 并且在 myfunc() 中有一个内存位置包含您希望视图用于比较的当前值? 它需要一个 UDF,但不是一个非常复杂的 UDF。

© www.soinside.com 2019 - 2024. All rights reserved.