Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не правильно работает UPDATE / 13 сообщений из 13, страница 1 из 1
16.04.2014, 08:09:50
    #38616032
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Пытаюсь выполнить вот такой скрипт

UPDATE dbtest SET name='Вася' WHERE id='EJclcjer443t';
UPDATE dbtest SET name='Петя' WHERE id='dvcjh867787';
UPDATE dbtest SET name='Коля' WHERE id='dgevhjyjmb';

и т.д.

Т.е. при совпадении поля id(уникальное) сменить поле name
Однако, выполняется только первая строка.
Pgadmin пишет "Изменено строк 1. Обработано 500"
В чем может быть ошибка?
...
Рейтинг: 0 / 0
16.04.2014, 08:47:20
    #38616043
Lonepsycho
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
bivilbi,

PgAdmin'ом не пользуюсь, но первая мысль, что вы цепляетесь за ответ выданный после отработки последней команды из трёх. поселектите и проверте действительно ли ничего не изменилось.
...
Рейтинг: 0 / 0
16.04.2014, 10:17:11
    #38616136
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Lonepsycho,

Смотрел на результат. Меняется только первая запись.
Пробовал и в EMS SQl manager
...
Рейтинг: 0 / 0
16.04.2014, 10:20:46
    #38616138
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Lonepsycho,

Хотя когда выполняю похожий запрос но с другим столбцом (не name, а desc)
set desc='test1' where id='453534'

то все отрабатывает корректно
...
Рейтинг: 0 / 0
16.04.2014, 11:57:10
    #38616273
Constanzo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
bivilbi, с большими/маленькими буквами в айди не мог что-нибудь напутать?
...
Рейтинг: 0 / 0
16.04.2014, 12:16:45
    #38616311
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Constanzo,

нее. синтаксис четко соблюдаю
...
Рейтинг: 0 / 0
08.10.2014, 07:37:21
    #38769861
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Продолжу, что бы не открывать новую тему
Есть две таблицы с одинаковыми столбцами
im-nomer-col
Первая таблица -
Вася,,Красный;
Петя,,Синий;
Вася,,фиолетовый:
Петя,,зеленый;
Вася,,Красный;
Петя,,Синий;


Вторая таблица
Вася,333,;
Петя,444,:
Вася,,;
Петя,,:
Делаю , что-бы подставить из таблицы 2 в 1
update tab1 set nomer=(select nomer from tab2 where im=im and nomer is not null);
т.е. взять nomer при совпадении im
Но он берет первый номер из таблицы 2 и ставит во все столбцы номера таблицы 2.
Пробовал вот так
update tab1 set nomer=(select nomer from tab2 where im=im );
но ессно ругается что записей боле 1)
и вот так update tab1 set nomer=(select nomer from tab2 where im=im limit1);
Аналогично

Помогите, плиз!
...
Рейтинг: 0 / 0
08.10.2014, 10:01:40
    #38769964
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
bivilbiupdate tab1 set nomer=(select nomer from tab2 where im=im );

Как узнать к какой таблице относится im слева и im справа от = ? К tab1 или к tab2?
Добавь алиасы к таблицам и столбцам.
...
Рейтинг: 0 / 0
08.10.2014, 11:52:38
    #38770160
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Павел Лузанов,
update tab1 set nomer=(select nomer from tab2 where im=im );
Обновить в таблице1 (tab1) значение nomer = выбрать nomer если im(таблица2)=im(таблица1)
как то так
а как алиасы тогда вписать?
...
Рейтинг: 0 / 0
08.10.2014, 12:05:37
    #38770179
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
bivilbiПавел Лузанов,
Код: sql
1.
update tab1 set nomer=(select nomer from tab2 where tab1.im=tab2.im ); 


Обновить в таблице1 (tab1) значение nomer = выбрать nomer если im(таблица2)=im(таблица1)
как то так
а как алиасы тогда вписать?более точно дело не в алиасах, а в табличных префиксах .


но если tab2 совпадает с tab1 -- то в дело пойдут уже алиасы. (чтобы специфицировать, к какому кортежу относятся im по разные стороны сравнения)
...
Рейтинг: 0 / 0
08.10.2014, 12:16:37
    #38770199
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
qwwqbivilbiПавел Лузанов,
Код: sql
1.
update tab1 set nomer=(select nomer from tab2 where tab1.im=tab2.im ); 


Обновить в таблице1 (tab1) значение nomer = выбрать nomer если im(таблица2)=im(таблица1)
как то так
а как алиасы тогда вписать?более точно дело не в алиасах, а в табличных префиксах .


но если tab2 совпадает с tab1 -- то в дело пойдут уже алиасы. (чтобы специфицировать, к какому кортежу относятся im по разные стороны сравнения)
Ага. Спасибо громадное!

А корректно будет вот так
update tab1 set nomer=(select DISTINCT nomer from tab2 where tab1.im=tab2.im ); ?
...
Рейтинг: 0 / 0
08.10.2014, 13:40:35
    #38770386
Павел Лузанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
qwwqболее точно дело не в алиасах, а в табличных префиксах
Да, конечно же. Просто я настолько привык, что имена таблиц значительно длиннее чем tab1,
что создание для них алиасов кажется обязательным. :-)

bivilbiА корректно будет вот так
update tab1 set nomer=(select DISTINCT nomer from tab2 where tab1.im=tab2.im ); ?
1. Нет гарантии, что подзапрос вернет ровно одну строку. На приведенных тестовых данных это так, но если в tab2 для Васи будет несколько строк с разными номерами, то будет ошибка.
2. В таком виде происходит update всех записей в tab1, даже тех, для которых в tab2 номер не найдется.
Нужно ли это? Если нет, то следует ограничить выборку для tab1

Впрочем если это разовое действие, то можно не заморачиваться.
...
Рейтинг: 0 / 0
08.10.2014, 16:27:54
    #38770652
bivilbi
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не правильно работает UPDATE
Павел Лузановqwwqболее точно дело не в алиасах, а в табличных префиксах
Да, конечно же. Просто я настолько привык, что имена таблиц значительно длиннее чем tab1,
что создание для них алиасов кажется обязательным. :-)

bivilbiА корректно будет вот так
update tab1 set nomer=(select DISTINCT nomer from tab2 where tab1.im=tab2.im ); ?
1. Нет гарантии, что подзапрос вернет ровно одну строку. На приведенных тестовых данных это так, но если в tab2 для Васи будет несколько строк с разными номерами, то будет ошибка.
2. В таком виде происходит update всех записей в tab1, даже тех, для которых в tab2 номер не найдется.
Нужно ли это? Если нет, то следует ограничить выборку для tab1

Впрочем если это разовое действие, то можно не заморачиваться.
Спасибо!!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Не правильно работает UPDATE / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]