【问题标题】:How can WHERE constraints be passed to a count(...) function in an inner SELECT query in a VIEW?如何在 VIEW 的内部 SELECT 查询中将 WHERE 约束传递给 count(...) 函数?
【发布时间】:2014-10-12 20:55:49
【问题描述】:

我在 SQLite 中有一个 VIEW,示意性地如下所示:

SELECT ownerid, field, origin, count FROM (
    SELECT 
        null AS ownerid,
        table1.somefield AS field,
        0 AS origin,
        count(table2.ownerid) AS count
    FROM table1 LEFT JOIN table2
    UNION ALL
    SELECT 
        table2.ownerid AS ownerid,
        table2.someotherfield AS field,
        1 AS origin,
        1 AS count
)

我用SELECT FROM viewname WHERE ownerid=? OR origin=0 类型的查询来调用它——换句话说,我想要的是第一个表中的条目,加上所有者ID 正确的第二个表中的条目。

第一个表的计数列应该是第二个表中与约束匹配的所有行的计数 - 换句话说,其 ownerid 是为其选择的行。我目前得到的是整个表的计数。

如何约束 count(...) 函数调用中的表达式以匹配传递给 VIEW 的查询约束?

【问题讨论】:

    标签: sqlite sql-view


    【解决方案1】:
    count(SELECT * FROM table2 WHERE ownerid=?)
    

    我认为你真正需要的是简化你的视图并限制信息。

    SELECT ownerid, field, origin, count FROM (
        SELECT 
            null AS ownerid,
            table1.somefield AS field,
            0 AS origin
        FROM table1 LEFT JOIN table2
        UNION ALL
        SELECT 
            table2.ownerid AS ownerid,
            table2.someotherfield AS field,
            1 AS origin
    )
    

    然后像这样从中获取所需的计数等

    SELECT *, CASE WHEN viewname.ownerid IS NULL THEN COUNT(select * from table2 where ownerid=?) ELSE 1 END
    FROM viewname
    

    【讨论】:

    • 如何将 VIEW 中的 ? 作为变量获取,可以这么说?更一般地说,如何从 VIEW 外部对计数施加限制?
    • 好吧,这破坏了它。不过,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2012-09-11
    相关资源
    最近更新 更多