сослаться на значение внешнего поля в подвыборке? - PullRequest
1 голос
/ 03 ноября 2010

Я хочу сделать запрос, чтобы обновить значения, которые я забыл скопировать при массовой вставке. Однако я не уверен, как это сформулировать.

UPDATE table 
   SET text_field_1 = (SELECT text_field_2 
                         FROM other_table 
                        WHERE id = **current row in update statement, outside parens**.id )

Как мне это сделать? Это похоже на работу по рекурсии.

Ответы [ 4 ]

2 голосов
/ 03 ноября 2010

Использование:

UPDATE YOUR_TABLE
   SET text_field_1 = (SELECT t.text_field_2 
                         FROM other_table t
                        WHERE t.id = YOUR_TABLE.id)

Внимание * * 1004 Если в other_table нет поддерживающей записи, text_field_1 будет установлен в NULL. Объяснение

В стандартном SQL вы не можете иметь псевдонимы таблиц в таблице, определенной для оператора UPDATE (или DELETE), поэтому вам необходимо использовать полное имя таблицы для указания источника столбца.

Это называется коррелированным подзапросом - корреляция должна быть причиной оценки по таблице из внешнего запроса.

Разъяснение

MySQL (и SQL Server) поддерживают псевдонимы таблиц в выражениях UPDATE и DELETE, в дополнение к синтаксису JOIN:

UPDATE YOUR_TABLE a
  JOIN OTHER_TABLE b ON b.id = a.id
   SET a.text_field_1 = b.text_field_2 

... не идентичен предоставленному запросу, потому что будут обновлены только те строки, которые соответствуют - те, которые не соответствуют, их значения text_field_1 останутся нетронутыми. Это эквивалентно предоставленному запросу:

   UPDATE YOUR_TABLE a
LEFT JOIN OTHER_TABLE b ON b.id = a.id
      SET a.text_field_1 = b.text_field_2 
0 голосов
/ 03 ноября 2010
UPDATE Table1, Tabl2
SET Table1.myField = Table2.SomeField
WHERE Table1.ID = Table2.ID

Примечание: я не пробовал.
Это будет обновлять только записи, где идентификаторы совпадают.

0 голосов
/ 03 ноября 2010

Если есть одно поле ID:

UPDATE updtable t1
  SET t1.text_field_1 = (
    SELECT t2.text_field_2
    FROM seltable t2
    WHERE t1.ID = t2.ID
  )
; 
0 голосов
/ 03 ноября 2010

Попробуйте это:

UPDATE table 
SET text_field_1 = (SELECT text_field_2 
FROM other_table 
WHERE id = table.id )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...