2012-01-25 2 views
0

Как я могу использовать результат 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

Не первый запрос всегда возвращает только '36' (1, 2, 3, ..., 1000 или даже 0 строк, но все с' 36')? –

ответ

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) 
+0

+1 спасибо. Мне особенно нравится этот ответ, в котором используется результат выбора и выполняется сравнение равенства. Я проверю это, чтобы посмотреть, как это работает для меня и отчитываться. – therobyouknow

+0

Добро пожаловать. Надеюсь, он исправит вашу проблему. – Kypros

+1

Это работает, если я изменить = в 'ОБНОВЛЕНИЕ TABLE_B SET string_field = 'ВЕРХНИЙ' ГДЕ двоичном table_B.string_field LIKE '% в нижнем регистре' И table_b.id IN (SELECT id_of_record_in_table_B ОТ TABLE_A ГДЕ table_A.id_of_record_in_table_B = 36) 'Using = дает результат, на который не повлияли строки. IN имеет желаемый эффект. Кредит вам и принят, потому что вы были достаточно близки. Кредит: http://www.roseindia.net/sql/mysql-example/mysql-nested-select.shtml и http://www.daniweb.com/web-development/databases/mysql/threads/10744 для 'В'. – therobyouknow

1

Это можно назвать update with multi table синтаксис, таким образом избегая подзапрос. Единственная проблема с этим синтаксисом заключается в том, что вы не можете использовать порядок и ограничение.

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 
+0

+1 Благодарю! Это интересно узнать о замене. – therobyouknow

+0

Я проверю это, чтобы посмотреть, как он работает для меня и отчитывается. – therobyouknow

+0

ли мое решение решить проблему ур? –

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); 
+0

Странно похожий на ответ @ Ангелина Надара. – therobyouknow

+0

no its same to @ kypro's as my - синтаксис нескольких таблиц –

Смежные вопросы