如何使用sqlite中的默认值填充表中缺少的行
我有一个包含3列的表(如何使用sqlite中的默认值填充表中缺少的行,sql,sqlite,Sql,Sqlite,我有一个包含3列的表(a,b,c),我想确保前两列中的每个可能的值组合都有一行包含该组合。例如,如果这是我的表格: a b c --- --- --- P X 1 Q Y 2 Q Z 3 R Y 4 S Y 5 S Z 6 列a中的唯一值为p,Q,R,S,列b中的唯一值为X,Y,Z。因此,我想创建一个查询,返回12行(4×3),用默认值(如0)填充列c中缺少的值,例如: a b c --- --
a
,b
,c
),我想确保前两列中的每个可能的值组合都有一行包含该组合。例如,如果这是我的表格:
a b c
--- --- ---
P X 1
Q Y 2
Q Z 3
R Y 4
S Y 5
S Z 6
列a
中的唯一值为p
,Q
,R
,S
,列b
中的唯一值为X
,Y
,Z
。因此,我想创建一个查询,返回12行(4×3),用默认值(如0)填充列c
中缺少的值,例如:
a b c
--- --- ---
P X 1
P Y 0
P Z 0
Q X 0
Q Y 2
Q Z 3
R X 0
R Y 4
R Z 0
S X 0
S Y 5
S Z 6
我目前的做法是:
select a, b, ifnull(c, 0)
from (select distinct a from table),
(select distinct b from table)
left join table using (a, b)
不幸的是,这个查询速度非常慢,因为该表包含大约一万行。如果我预先计算查询并将其存储在表中,那么访问结果的速度会更快,但它占用大量空间,其中大部分空间可能只是在c
列中填充了零。有什么方法可以加快查询速度吗?对于此查询:
select a.a, b.b, coalesce(c.c, 0)
from (select distinct a from table) a cross join
(select distinct b from table) b left join
table c
using (a, b);
您希望索引位于:
(a,b)
(b)
第一个索引可用于
选择不同的a
和连接
。第二个可以用于选择不同的b
我不知道如何加速笛卡尔积。这里有一些不错的评论:。您更关心的是性能还是磁盘空间?性能更重要。