我想借助其他表的外键更新一个表.
我想做这样的事情:
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)
我认为以下任何一种都可行:
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)
这是因为 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 语句返回的单个记录和多个记录。