2013-08-13 1 views
0

Я создал сценарий с необходимым условием для меня. И он работает правильно. Но мне нужно применить этот скрипт на многих строках. И не только где id 15.Оператор UPDATE с подзапросом

UPDATE my_table SET my_field = 
    (SELECT 
    CASE WHEN position('a' in my_field) = 0 THEN my_field 
      WHEN position('a' in my_field) = 1 THEN substring(my_field from 1 for 5) 
      WHEN position('a' in my_field) > 1 THEN substring(my_field from 2 for 5) 
    END 
    FROM my_table WHERE id = 15) 
WHERE id = 15 

Я хотел бы применить этот скрипт к строкам, где выполняется конкретное условие. Например, я хотел бы написать WHERE my_field LIKE '%ab%'. Но проблема в том, что у меня есть подзаголовок. Поэтому я могу применить отдельный скрипт для получения всего необходимого идентификатора, а затем применить этот скрипт, вручную заменяя отдельный идентификатор из отдельного сценария. Но я хочу применить его автоматически с помощью одного запроса.

+0

Итак, вы хотите, чтобы получить список идентификаторов и перебрать список заменяющего ID с текущим в цикле, например? – christiandev

+0

Да, если это возможно. –

+0

Я начал писать код в T-SQL, а затем понял, что вы используете postgresql, поэтому этот код не будет полезен - так взгляните на эту ссылку http://www.postgresql.org/docs/8.4/static/plpgsql -control-structures.html – christiandev

ответ

1

Это проще, чем вы думаете :)

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

UPDATE my_table 
SET my_field = 
    CASE 
      WHEN position('a' in my_field) = 0 THEN my_field 
      WHEN position('a' in my_field) = 1 THEN substring(my_field from 1 for 5) 
      WHEN position('a' in my_field) > 1 THEN substring(my_field from 2 for 5) 
    END 

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

  • Нет связанных вопросов^_^