【问题标题】:Use filter criteria from one table to dynamically select data from another table an union all results使用一个表中的筛选条件从另一个表中动态选择数据并合并所有结果
【发布时间】:2022-01-14 14:39:12
【问题描述】:

是否可以使用 sqlite 创建这样的查询,该查询循环遍历一个表,一次选择一行,我可以将其用作另一个(复杂)查询及其子查询的参数?这是我的意思的简短演示。

有一个带有条件的表格:

create temp table filter as
    select 'foo' name, '+1 day' offset union
    select 'bar' name, '+3 day' offset union
    select 'baz' name, '+6 day' offset;    

这是包含数据的表格:

create temp table data as
    select 'foo' name, '2021-12-05' day union
    select 'bar' name, '2021-12-06' day union
    select 'foo' name, '2021-12-07' day union
    select 'baz' name, '2021-12-08' day union
    select 'baz' name, '2021-12-09' day union
    select 'bar' name, '2021-12-10' day;

现在,我想遍历过滤器行并使用每一行从第二个表中查询数据,然后查询union 所有结果。显然下面的伪代码不起作用:

foreach filter
   previous result
   union all
   select * 
   from data
   where date(day) = date('2021-12-07', filter.offset)

我在考虑递归 CTE,但是当涉及到另一个表时,我不确定如何将它组合在一起。

【问题讨论】:

    标签: sqlite date join foreach date-arithmetic


    【解决方案1】:

    你描述的是两个表的连接:

    SELECT d.* 
    FROM data d INNER JOIN filter f
    ON d.name = f.name AND d.day = date('2021-12-07', f.offset);
    

    我在ON 子句中添加了条件d.name = f.name,因为可能相关的两列相似。
    如果确实不需要,请删除条件。

    请参阅demo

    【讨论】:

    • 嗯,我真的想过度设计它吗? :-|
    • @t3chb0t 您编写伪代码的方式类似于递归 cte,但我认为这个要求更简单。
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2014-12-04
    • 2015-02-15
    • 2017-11-13
    相关资源
    最近更新 更多