如何使用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
。
答案 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);