2016-02-26 20 views
0

我有一个表如下:SQLite更新与连接不可能,我用什么?

ID Col_A Col_B 

1 P-1  123 
2 S  123 
3 P-3  456 
4 S  456 

ID是主键。

我想要做的是根据Col_B等价将第1行和第3行的ID连接到第2行和第4行的Col_A。换句话说,在Col_A ='S'的情况下,在Col_B中找到具有相同值的行的ID,并将该ID添加到Col_A。

其结果将是:

1 P-1 123 
2 S-1 123 
3 P-3 456 
4 S-3 456  

可能有人请告诉我如何写在SQLite的这个查询,我没有成功。

在SQL Server中我使用内部连接在同一个表,这个工程:

UPDATE A 
SET A.Col_A = 'S-' + CAST(B.ID as VARCHAR(24)) 
FROM Table1 A 
INNER JOIN Table1 B ON 
A.Col_B = B.Col_B 
WHERE A.Col_A = 'S'; 

至于我可以告诉你不能使用更新内SQLite的联接,但没有想法做什么来代替。

我曾尝试:

UPDATE Table1 
SET Col_A = 'S' || (SELECT B.ID from Table1 B WHERE B.Col_B = Col_B) 
WHERE Col_A = 'S'; 

这导致:

1 P-1 123 
2 S-1 123 
3 P-3 456 
4 S-1 456 

回答

1

没有一个表的前缀,Col_B指的是最里面的表,其中此列名都可以找到。在这种情况下,这将是Table1 B

要引用外部表,则必须使用它的名字:Table1.Col_B

UPDATE Table1 
SET Col_A = 'S' || (SELECT B.ID from Table1 B WHERE B.Col_B = Table1.Col_B) 
WHERE Col_A = 'S'; 
+0

CL你介意写出的查询,所以我可以确切地明白你的意思?我已经尝试了各种版本的表前缀,并且它们都有相同的结果。 '连接'在同一张桌子上,所以很混乱。 – Alex

+0

谢谢,辉煌! – Alex

相关问题