我如何建立一个;如有其他",;插入中的SQL查询?
我试图将列从一个SQLite表复制到另一个SQLite表,但将布尔值(0或1)替换为枚举(0到9)。一个给定的项可以在表中出现两次-每个布尔设置一次。我希望优先使用我如何建立一个;如有其他",;插入中的SQL查询?,sql,sqlite,Sql,Sqlite,我试图将列从一个SQLite表复制到另一个SQLite表,但将布尔值(0或1)替换为枚举(0到9)。一个给定的项可以在表中出现两次-每个布尔设置一次。我希望优先使用true布尔值复制记录,如果不存在,则我希望使用false布尔值复制记录 有没有一种方法可以在单个查询中实现这一点 我已经在下面介绍了我当前的方法,但这需要在同一组表上运行多个查询,因此效率低于一个查询 // Table schemas Table1(Col1 text, Col2 text, Col3_bool int, Col4
true
布尔值复制记录,如果不存在,则我希望使用false
布尔值复制记录
有没有一种方法可以在单个查询中实现这一点
我已经在下面介绍了我当前的方法,但这需要在同一组表上运行多个查询,因此效率低于一个查询
// Table schemas
Table1(Col1 text, Col2 text, Col3_bool int, Col4 int, Primary Key(Col1, Col2, Col3))
Table2(Col1 text, Col2 text, Col3_enum int, Col4 int, Primary Key(Col1, Col2, Col3))
// Pseudo code
for (int i = 0; i < 10; ++i)
{
insert into Table2 select Col1, Col2, i, Col4 from Table1 where Col3_bool = 0;
insert or replace into Table2 select Col1, Col2, i, Col4 from Table1 where Col3_bool = 1;
}
//表架构
表1(Col1文本、Col2文本、Col3_bool int、Col4 int、主键(Col1、Col2、Col3))
表2(Col1 text,Col2 text,Col3_enum int,Col4 int,主键(Col1,Col2,Col3))
//伪码
对于(int i=0;i<10;++i)
{
插入表2中,从表1中选择Col1,Col2,i,Col4,其中Col3_bool=0;
在表2中插入或替换,从表1中选择Col1、Col2、i、Col4,其中Col3_bool=1;
}
只要对所有查询使用单个事务,就不太可能有明显的性能差异
对于每个Col1
/Col2
组合,您需要最大Col3
值:
SELECT Col1, Col2, MAX(Col3_bool)
FROM Table1
GROUP BY Col1, Col2
然后可以使用这些值来获取所需的行:
SELECT Table1.Col1,
Table1.Col2,
Table1.Col3_bool,
Table1.Col4
FROM Table1
JOIN (SELECT Col1,
Col2,
MAX(Col3_bool) AS Col3_bool
FROM Table1
GROUP BY Col1,
Col2
) USING (Col1, Col2, Col3_bool)
要为这些行中的每一行获取十行,请与另一个具有十个值的表进行交叉联接:
INSERT INTO Table2
SELECT Table1.Col1,
Table1.Col2,
enums.i,
Table1.Col4
FROM Table1
JOIN (SELECT Col1,
Col2,
MAX(Col3_bool) AS Col3_bool
FROM Table1
GROUP BY Col1,
Col2
) USING (Col1, Col2, Col3_bool)
JOIN (SELECT 0 AS i UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5 UNION ALL
SELECT 6 UNION ALL
SELECT 7 UNION ALL
SELECT 8 UNION ALL
SELECT 9) AS enums