Форум программистов, компьютерный форум, киберфорум
Наши страницы
Oracle
Войти
Регистрация
Восстановить пароль
 
Jefe
221 / 210 / 87
Регистрация: 05.06.2013
Сообщений: 621
1

Апдейт нескольких значений уникальными данными

06.03.2014, 12:41. Просмотров 454. Ответов 2
Метки нет (Все метки)

Вобщем суть такова, есть запрос, который возвращает нам некорректные записи, например их 5.
Нужна примерная структура запроса на обновление, которая будет делать примерно следующую вещь:

SQL
1
SELECT TOPIC_ID FROM topics WHERE TOPIC_LAST_POST_ID NOT IN (SELECT POST_ID FROM jforum_posts);
запрос вернет нам например 5 ID некорректных тем, у которых указано несуществующее значение TOPIC_LAST_POST_ID

После чего нужно эти данные поправить на корректные, но для каждого из 5 ID выполнить однотипный скрипт отдельно, использую текущий ID, например:

SQL
1
2
3
4
5
UPDATE topics SET TOPIC_LAST_POST_ID = (SELECT MAX(POST_ID) FROM posts WHERE TOPIC_ID = <Первое ID из 5>) WHERE TOPIC_ID = <Первое ID из 5>;
UPDATE topics SET TOPIC_LAST_POST_ID = (SELECT MAX(POST_ID) FROM posts WHERE TOPIC_ID = <Второе ID из 5>) WHERE TOPIC_ID = <Второе ID из 5>;
UPDATE topics SET TOPIC_LAST_POST_ID = (SELECT MAX(POST_ID) FROM posts WHERE TOPIC_ID = <Третье ID из 5>) WHERE TOPIC_ID = <Третье ID из 5>;
UPDATE topics SET TOPIC_LAST_POST_ID = (SELECT MAX(POST_ID) FROM posts WHERE TOPIC_ID = <Четвертое ID из 5>) WHERE TOPIC_ID = <Четвертое ID из 5>;
UPDATE topics SET TOPIC_LAST_POST_ID = (SELECT MAX(POST_ID) FROM posts WHERE TOPIC_ID = <Пятое из 5>) WHERE TOPIC_ID = <Пятое ID из 5>;
Т.е. нужно проапдейтить каждую найденную некорректную запись своей уникальной. Как это более просто сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2014, 12:41
Ответы с готовыми решениями:

Вставка нескольких значений из xmltable в бд
Здравствуйте. Возникла необходимость вставить несколько значений requirement в...

АПДЕЙТ в sql
Доброго времени суток. Есть запрос на апдейт одной таблицы. Мне нужно добавить...

Хранение значений с возможностью одновременного добавления/изменения с нескольких пользователей
Здравствуйте. Есть такие проблемные списки, как список друзей, закладки на...

Копировать таблицу с данными, перенос таблицы из одной БД в другую (также с данными)
Доброе времени суток всем! Помогите разобраться, как скопировать таблицу...

Как вывести разницу между уникальными данными
Имеется запрос: SELECT distinct phone_client AS tel_79991231212 FROM...

2
KuKu
1559 / 1037 / 93
Регистрация: 17.04.2009
Сообщений: 2,995
06.03.2014, 13:10 2
1)
SQL
1
UPDATE (SELECT topic_id, new_value, topic_last_post_id) SET topic_last_post_id = new_value;
2) Аналогично первому варианту, но через merge
3) Можно в лоб: цикл pl/sql
0
Jefe
221 / 210 / 87
Регистрация: 05.06.2013
Сообщений: 621
06.03.2014, 15:10  [ТС] 3
Получилось сделать вот так:

SQL
1
2
3
4
5
6
7
8
UPDATE topics
    SET topic_last_post_id = (SELECT MAX(posts.post_id) 
         FROM posts 
              INNER JOIN posts jp
                   ON jp.post_id = posts.post_id
              WHERE posts.topic_id = topics.topic_id)
    WHERE topic_last_post_id NOT IN (SELECT post_id FROM posts);
COMMIT;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.03.2014, 15:10

Запрос на разницу значений при отсутствии нескольких показателей в одном из значений
Добрый вечер! Прошу прощения за возможно глупый вопрос, но для меня это...

Возврат нескольких значений из метода не знаем сколько таких значений
Здравствуйте! Собственно вопрос: как возвращать &lt;несколько&gt; значений из метода...

Форма с данными из нескольких таблиц
Здравствуйте! Необходимо создать форму, через которую можно будет вводит данных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru