【问题标题】:SQLite update with join not possible, what do I use?无法使用连接进行 SQLite 更新,我该使用什么?
【发布时间】:2016-02-26 14:18:43
【问题描述】:

我有一张如下表:

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 

【问题讨论】:

    标签: sqlite tsql sql-update inner-join


    【解决方案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'; 
    

    【讨论】:

    • CL 你介意写出查询,所以我可以明白你的意思吗?我尝试了各种版本的表前缀,它们都有相同的结果。 'join' 在同一张桌子上,所以很混乱。
    猜你喜欢
    • 1970-01-01
    • 2017-05-27
    • 2011-05-28
    • 2022-01-24
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多