如何使用多表语法更新?

时间:2012-01-25 18:10:37

标签: mysql resultset chaining

如何使用SELECT的结果来确定后续UPDATE中更改的字段。 (在复合语句中有效链接SELECT后跟UPDATE)。

以下是我在SQL中尝试做的事情:

SELECT id_of_record_in_table_B 
FROM table_A 
WHERE table_A.id_of_record_in_table_B = 36;

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id = id_of_record_in_table_B --from the SELECT above)

区分大小写的匹配与问题无关,但我已将其包含在内,因为它实际上是我需要做的。我想解决的问题是如何将SELECT返回的值“传递”到UPDATE

3 个答案:

答案 0 :(得分:1)

你可以在同一个查询中使用它,例如

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_b.id = (SELECT id_of_record_in_table_B 
                  FROM table_A 
                  WHERE table_A.id_of_record_in_table_B = 36)

答案 1 :(得分:1)

这可以称为update with multi table语法,从而避免使用子查询。此语法的唯一问题是您不能使用order by和limit子句

 UPDATE table_B as tb,table_A as ta 
 SET tb.string_field = 'UPPERCASE'  

 WHERE BINARY tb.string_field LIKE '%lowercase' 
 AND tb.id = id_of_record_in_table_B
 AND tA.id_of_record_in_table_B = 36

答案 2 :(得分:0)

您可以使用嵌套的select语句。

UPDATE table_B SET string_field = 'UPPERCASE' 
WHERE BINARY table_B.string_field LIKE '%lowercase' 
AND table_B.id IN (SELECT id_of_record_in_table_B 
                   FROM table_A 
                   WHERE table_A.id_of_record_in_table_B = 36);