Как обновить синтаксис с несколькими таблицами? - PullRequest
0 голосов
/ 25 января 2012

Как я могу использовать результат SELECT для определения полей, измененных в последующем UPDATE. (Эффективно объединяя в цепочку оператор SELECT, а затем ОБНОВЛЕНИЕ в составном операторе).

Вот что я пытаюсь сделать в 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 ]

1 голос
/ 25 января 2012

Это можно назвать синтаксисом 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
1 голос
/ 25 января 2012

Вы можете сделать это в том же запросе, как

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)
0 голосов
/ 27 января 2012

Вы можете использовать вложенный оператор выбора.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...