powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проблемы с Update
25 сообщений из 27, страница 1 из 2
Проблемы с Update
    #35496959
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. Подскажите пожалуйста как организовать запрос типа:
update Table1 set table1.text1=table2.text2
where x1 in (select x1 from table2)
нужно заменить поле text1 в таблице text1 на данные находящиеся в поле text2 таблицы table2 соответственно. Приведенный выше запрос не работает.
Заранее СПАСИБО!
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497223
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
UPDATE table1 t1
   SET t1.text1 = (SELECT text2
                     FROM table2
                    WHERE x1 = t1.x1);
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497410
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за тупость но мне не совсем понятно
UPDATE table1 t1
SET t1.text1 = (SELECT text2
FROM table2
WHERE x1 = t1.x1);
Мне нужно заменить данные поля text1.table1 на text2.table2
всех записей удовлетворяющих условию
select * from table1
where поле_x in (select поле_x from table2), где поле_x это номер (например ИНН)
а не наоборот
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497455
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update table1
set text1 =(select text1 from table1
where (поле_x in (select поле_x from table1)) and (поле_x is not null))
Все бы не чего но вот какая ошибка

Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
Т.е. я так понял что подзапрос и знак равенства сдесь не совместимы set text1 =(select ....
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497490
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь уже не понял я.
У Вас одной строке с конкретным значением поля_x в таблице table1 соответствует несколько строк таблицы table2 с этим же значением в поле_x?

Т.е. ситуация, примерно, такая?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
table1
x  text1
 1   '1_111'
 2   '1_222'

table2
x  text2
 1   '2_1111'
 1   '2_1112'
 2   '2_2222'
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497530
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту проблему я решил
set text1 =(select text1 from table1
where (поле_x in (select поле_x from table1)) and (поле_x is not null))
конкретнее тут (поле_x is not null)
но как быть
с этим
Server: Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.
Вы вообще побывали присваивать set text1 =(select text1 from table1... подзапрос
знак равенства не прокатывает также сдесь
where (поле_x in (select поле_x from table1)) and (поле_x is not null)) вместо in
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497554
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы мои-то вопросы видели? Можете тестовый пример с данными привести, на которых ошибка проявляется?
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497638
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
update table1
set text1 =(select text2 from table2
where (поле_x in (select поле_x from table1)) and (поле_x is not null))
Разбираем по "полочкам" запрос
(select text1 from table1
where (поле_x in (select поле_x from table1)) and (поле_x is not null))
выполняется без нареканий т.е. выводит поле text2 из таблицы table2 если выполняется условие что номер [поле_x] из таблицы table2 входит в список возвращаемый подзапросом select поле_x from table1
говорю же проблемы с выполнением всего запроса т.е. с присвоением полю text1 списка значений...
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497671
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_Fedorс присвоением полю text1 списка значений...
Я для этого и просил тестовые данные.
Как Вы себе представляете запись в атомарное поле списка значений атомарных полей ? Что Вы хотите в результате получить?
Прошу же написать пару строк из каждой таблицы и то, что Вы хотите видеть в результате.
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497694
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tabl1
Поле_x ....... text1
131333 ....... xxxx
373627 ....... xqqq
.........................
131313 ....... Null

tabl2
Поле_x ....... text2
131333 ....... 23fmkd
373627 ....... iutnccn
............................

результат
tabl1
Поле_x ....... text1
131333 ....... 23fmkd
373627 ....... iutnccn
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497701
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подозреваю, что у Вас в table2 есть строки с одинаковыми значениями в Поле_x.
Т.е. пример можно дополнить, например, так:
tabl2
Поле_x ....... text2
131333 ....... 23fmkd
373627 ....... iutnccn
............................
373627 ....... qwerty

Есть такие дубликаты?
...
Рейтинг: 0 / 0
Проблемы с Update
    #35497751
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть но я их отфильтровал по полю text2 там стоит null после выполнения запроса
where поле_x in (select поле_x from table1)and (text2 is not null) дубли исчезают читайте выше
...
Рейтинг: 0 / 0
Проблемы с Update
    #35498285
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorЕсть но я их отфильтровал по полю text2 там стоит null после выполнения запроса
where поле_x in (select поле_x from table1)and (text2 is not null) дубли исчезают читайте выше
Где это у Вас выше условие "text2 is not null"? У Вас там везде "поле_x is not null".
...
Рейтинг: 0 / 0
Проблемы с Update
    #35498799
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин ошибся! Правильно text2 и в реальном запросе с моими таблицами часть
(select text2 from table2
where (поле_x in (select поле_x from table1)) and (text2 is not null))
выполняется так как нужно мне, а вот update не знаю как прикрутить
update table1
set text1 =(select text2 from table2
where (поле_x in (select поле_x from table1)) and (text2 is not null))

Есть конечно другой способ но он "геморойней" на мой взгляд
формировать отдельную таблицу с полями (кроме text1) из 1-ой таблицы, а поле текст взять из второй
далее удалить все записи идентичные сформировавшимся (проверка не включает поле text) и в наглую вставить из новой
...
Рейтинг: 0 / 0
Проблемы с Update
    #35498812
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
UPDATE table1 t1
   SET t1.text1 = (SELECT text2
                     FROM table2
                    WHERE x1 = t1.x1
                      AND text2 IS NOT NULL);
...
Рейтинг: 0 / 0
Проблемы с Update
    #35498851
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое t1. да и еще названия полей значения которых нужно поменять одинаковые.
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499032
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorЧто такое t1. да и еще названия полей значения которых нужно поменять одинаковые.
t1 -псевдоним (alias).
Что одинаковое? text1 из table1 и text2 из table2 одинковые?
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499214
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
----Что одинаковое? text1 из table1 и text2 из table2 одинковые?
да text1 из table1 и text2 из table2 одинаковые названия полей (это только в одном случае), а вообще названия могут в корне не совпадать.
А псевдоним, его нужно объявить? Как? запрос выполняется из Query Analyzer (если это имеет значение).
Вы вообще пробовали выполнить подобный запрос?
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499261
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
CREATE TABLE table1
(
    x     NUMBER,
    text1 VARCHAR2( 10 )
);

CREATE TABLE table2
(
    x     NUMBER,
    text2 VARCHAR2( 10 )
);

INSERT INTO table1 (x, text1) VALUES ( 131333 , 'xxxx');
INSERT INTO table1 (x, text1) VALUES ( 373627 , 'xqqq');
INSERT INTO table1 (x, text1) VALUES ( 131313 , NULL);

INSERT INTO table2 (x, text2) VALUES ( 131333 , '23fmkd');
INSERT INTO table2 (x, text2) VALUES ( 373627 , 'iutnccn');

COMMIT;

SELECT * FROM table1;

-- Результат
--         X TEXT1
------------ ----------
--    131333 xxxx
--    373627 xqqq
--    131313

SELECT * FROM table2;

-- Результат
--         X TEXT2
------------ ----------
--    131333 23fmkd
--    373627 iutnccn

UPDATE table1 t1
   SET t1.text1 = (SELECT text2
                     FROM table2
                    WHERE x = t1.x
                      AND text2 IS NOT NULL);

SELECT * FROM table1;

-- Результат
--         X TEXT1
------------ ----------
--    131333 23fmkd
--    373627 iutnccn
--    131313


Результат такой нужен?
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499458
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все в точности так только там ошибочки у Вас вместо
x NUMBER,
text2 VARCHAR2(10) нужно

x NUMERIC,
text2 VARCHAR(10)
но это мелочь
запрос
UPDATE table1 t1
SET t1.text1 = (SELECT text2
FROM table2
WHERE x = t1.x
AND text2 IS NOT NULL)
не выполняется
ошибка:
Server: Msg 170, Level 15, State 1, Line 39
Line 39: Incorrect syntax near 't1'.
Прошу прощения за тупость
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499510
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это не ошибочки, просто у Вас, судя по всему, SQL Server, а у меня - Oracle.
Видимо, синтаксис с псевдонимом нестандартный и является фишкой Oracle.

Интересно, а так заработает?
Код: plaintext
1.
2.
3.
4.
5.
UPDATE table1
   SET t1.text1 = (SELECT text2
                     FROM table2
                    WHERE x = table1.x
                      AND text2 IS NOT NULL);
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499522
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин конечно у меня MS SQL Server 2000
И что делать?
Огромное Вам спасибо, буду ручками править
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499558
Chek_Fedor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет так не заработает
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499559
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы предложенный вариант без псевдонима попробовали запустить?
Ручками - это, конечно, выход. Но никак не в этой ситуации.
Запрос ерундовый совершенно - просто нужно Оракловый синтаксис переложить на MS. Наверняка последний вариант уже заработает - попробуйте.
...
Рейтинг: 0 / 0
Проблемы с Update
    #35499565
Dihotom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chek_FedorНет так не заработает
Ну задайте этот вопрос в теме по SQL Server'у - там Вам быстро объяснят, что и как нужно скорректировать. Или вообще эту тему туда надо перекинуть - если по-хорошему :)
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проблемы с Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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