我有一个sqlite3(通过python3进行交互) db表(名为"T"),它看起来像-
ID(PK) A B .... M .... N ..... P ..... X
_____________________________________________________________
1 "string1" "tom" "Jim" "Subway" NULL "Mr.Sub"
2 "string2" "tom" "Jim" "Hungry" NULL "Mr.Sub"
3 "string3" "tom" "Jim" NULL "XBOX" "Mr.Sub"
4 "string1" "Pam" "Dave" NULL "GOLF" "Starbucks"
5 "string2" "Pam" "Dave" "Arbys" NULL "Starbucks"
6 "string1" "Kyle" "Ron" NULL NULL "Gamers"
7 "string4" "Kyle" "Ron" NULL "CART" "Gamers"我想对它做以下操作-
对于上面的例子,结果表应该类似于-
ID(PK) A B .... M .... N ..... P .... X
____________________________________________________________
1 "string1" "tom" "Jim" "Subway" "XBOX" "Mr.Sub"
4 "string1" "Pam" "Dave" "Arbys" "GOLF" "Starbucks"
6 "string1" "Kyle" "Ron" NULL "CART" "Gamers"我能想出的解决办法是:
update a
set a.N = coalesce(a.N, b.N)
set a.P = coalesce(a.P, b.P)
from T a inner join T b
on a.B = b.B and a.M = b.M and a.X = b.X这是基于在博客文章这里中给出的mysql示例。但是,这在sqlite3中不起作用,并且缺乏基于A列值的优先级。有人能共享在sqlite3中工作的正确查询吗?
发布于 2017-07-20 13:26:45
合并操作可以描述如下:
string1行,如果N或P值为空,则从同一string1组中具有非空值的其他行中提取它们。stringX行。UPDATE T
SET N = (SELECT N
FROM T AS T2
WHERE T2.B = T.B
AND T2.M = T.M
AND T2.X = T.X
AND T2.N IS NOT NULL)
WHERE A = 'string1'
AND N IS NULL;
UPDATE ... -- same for P
DELETE FROM T
WHERE A <> 'string1';https://stackoverflow.com/questions/45205899
复制相似问题