Создание SQL запроса средствами другого SQL запроса -- пример ;)

Forums:

Когда это нужно

Ситуация возникает, когда в какой-то локальной базе, например, в одной из табилиц у вас есть полезная информация, которую хотелось бы перенести в другую БД, но накатить дамп таблицы возможности нет (например, на эту таблицу на втором сервере ссылаются внешние ключи), поэтому придётся использовать UPDATE, который перенёс бы значение "за раз".
Именно такой запрос мы и сгенерировали в этом примере.

В данном случае мы будем переносить значение russianTimezoneID из таблицы Subjects (то есть создадим запрос для обновления этой же таблицы на другом сервере)

SQL запрос с помощью другого запроса

Просто используем замечательную конкатенацию:

SELECT CONCAT("UPDATE `Subjects` SET `russianTimezoneID`=", 
    russianTimezoneID,
  " WHERE `subjectID` =  ", 
  subjectID, 
  ";") as sqlquery  FROM Subjects;

Получим что-то вроде:

UPDATE `Subjects` SET `russianTimezoneID`=1 WHERE `subjectID` =  84;
UPDATE `Subjects` SET `russianTimezoneID`=1 WHERE `subjectID` =  85;
UPDATE `Subjects` SET `russianTimezoneID`=2 WHERE `subjectID` =  42;
UPDATE `Subjects` SET `russianTimezoneID`=3 WHERE `subjectID` =  18;
UPDATE `Subjects` SET `russianTimezoneID`=3 WHERE `subjectID` =  33;
UPDATE `Subjects` SET `russianTimezoneID`=3 WHERE `subjectID` =  64;