如何在SQLite中使用select语句更新表

Nid*_*dhi 13 sql sqlite

我想借助其他表的外键更新一个表.

我想做这样的事情:

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT tbl_2.item1 
                FROM tbl_1, tbl_2 
                WHERE tbl_1.field3 = tbl_2.item1 AND tbl_2.item2 = 135)
Run Code Online (Sandbox Code Playgroud)

要么

UPDATE tbl_1 
SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT item1 FROM tbl_2 WHERE item2 = 135)
Run Code Online (Sandbox Code Playgroud)

Gar*_*thD 7

我认为以下任何一种都可行:

UPDATE  tbl_1 
SET     field1 = 6, field12 = NULL 
WHERE   EXISTS 
        (   SELECT 1
            FROM tbl_2 
            WHERE tbl_1.field3 = tbl_2.item1 
            AND tbl_2.item2 = 135
        )
Run Code Online (Sandbox Code Playgroud)

要么

UPDATE  tbl_1 
SET     field1 = 6, field12 = NULL 
WHERE   field3 IN (SELECT item1 FROM tbl_2 WHERE item2 = 135)
Run Code Online (Sandbox Code Playgroud)

  • 两者都在工作,但sqllite只支持第一个..非常感谢... :) (2认同)

naw*_*fal 5

这是因为 SELECT 返回多行。改为这样做:

UPDATE tbl_1 SET field1 = 6, field12 = NULL 
WHERE field3 IN (SELECT item1 FROM tbl_2 WHERE item2 = 135)
Run Code Online (Sandbox Code Playgroud)

当返回时使用SELECT一个表(或多行) 。IN如果您确定内部查询应该只返回一行,那么您将必须相应地调整内部查询。像这样或这样:

UPDATE tbl_1 SET field1 = 6, field12 = NULL 
WHERE field3 = (SELECT item1 FROM tbl_2 WHERE item2 = 135 ORDER BY myValue LIMIT 1)
Run Code Online (Sandbox Code Playgroud)

在这里使用它更安全IN,因为它可以处理从 SELECT 语句返回的单个记录和多个记录。