Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проблемы с Update / 25 сообщений из 27, страница 1 из 2
20.08.2008, 13:59
    #35496959
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Доброго времени суток. Подскажите пожалуйста как организовать запрос типа:
update Table1 set table1.text1=table2.text2
where x1 in (select x1 from table2)
нужно заменить поле text1 в таблице text1 на данные находящиеся в поле text2 таблицы table2 соответственно. Приведенный выше запрос не работает.
Заранее СПАСИБО!
...
Рейтинг: 0 / 0
20.08.2008, 15:18
    #35497223
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Код: plaintext
1.
2.
3.
4.
UPDATE table1 t1
   SET t1.text1 = (SELECT text2
                     FROM table2
                    WHERE x1 = t1.x1);
...
Рейтинг: 0 / 0
20.08.2008, 16:18
    #35497410
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Прошу прощения за тупость но мне не совсем понятно
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
20.08.2008, 16:31
    #35497455
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
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
20.08.2008, 16:40
    #35497490
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Теперь уже не понял я.
У Вас одной строке с конкретным значением поля_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
20.08.2008, 16:51
    #35497530
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Эту проблему я решил
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
20.08.2008, 16:57
    #35497554
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Вы мои-то вопросы видели? Можете тестовый пример с данными привести, на которых ошибка проявляется?
...
Рейтинг: 0 / 0
20.08.2008, 17:26
    #35497638
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
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
20.08.2008, 17:38
    #35497671
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Chek_Fedorс присвоением полю text1 списка значений...
Я для этого и просил тестовые данные.
Как Вы себе представляете запись в атомарное поле списка значений атомарных полей ? Что Вы хотите в результате получить?
Прошу же написать пару строк из каждой таблицы и то, что Вы хотите видеть в результате.
...
Рейтинг: 0 / 0
20.08.2008, 17:50
    #35497694
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
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
20.08.2008, 17:54
    #35497701
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Подозреваю, что у Вас в table2 есть строки с одинаковыми значениями в Поле_x.
Т.е. пример можно дополнить, например, так:
tabl2
Поле_x ....... text2
131333 ....... 23fmkd
373627 ....... iutnccn
............................
373627 ....... qwerty

Есть такие дубликаты?
...
Рейтинг: 0 / 0
20.08.2008, 18:08
    #35497751
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Есть но я их отфильтровал по полю text2 там стоит null после выполнения запроса
where поле_x in (select поле_x from table1)and (text2 is not null) дубли исчезают читайте выше
...
Рейтинг: 0 / 0
21.08.2008, 09:17
    #35498285
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
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
21.08.2008, 12:19
    #35498799
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Блин ошибся! Правильно 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
21.08.2008, 12:23
    #35498812
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Код: 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
21.08.2008, 12:34
    #35498851
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Что такое t1. да и еще названия полей значения которых нужно поменять одинаковые.
...
Рейтинг: 0 / 0
21.08.2008, 13:17
    #35499032
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Chek_FedorЧто такое t1. да и еще названия полей значения которых нужно поменять одинаковые.
t1 -псевдоним (alias).
Что одинаковое? text1 из table1 и text2 из table2 одинковые?
...
Рейтинг: 0 / 0
21.08.2008, 14:01
    #35499214
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
----Что одинаковое? text1 из table1 и text2 из table2 одинковые?
да text1 из table1 и text2 из table2 одинаковые названия полей (это только в одном случае), а вообще названия могут в корне не совпадать.
А псевдоним, его нужно объявить? Как? запрос выполняется из Query Analyzer (если это имеет значение).
Вы вообще пробовали выполнить подобный запрос?
...
Рейтинг: 0 / 0
21.08.2008, 14:13
    #35499261
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Код: 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
21.08.2008, 14:56
    #35499458
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Все в точности так только там ошибочки у Вас вместо
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
21.08.2008, 15:07
    #35499510
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Это не ошибочки, просто у Вас, судя по всему, 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
21.08.2008, 15:10
    #35499522
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Блин конечно у меня MS SQL Server 2000
И что делать?
Огромное Вам спасибо, буду ручками править
...
Рейтинг: 0 / 0
21.08.2008, 15:18
    #35499558
Chek_Fedor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Нет так не заработает
...
Рейтинг: 0 / 0
21.08.2008, 15:19
    #35499559
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Вы предложенный вариант без псевдонима попробовали запустить?
Ручками - это, конечно, выход. Но никак не в этой ситуации.
Запрос ерундовый совершенно - просто нужно Оракловый синтаксис переложить на MS. Наверняка последний вариант уже заработает - попробуйте.
...
Рейтинг: 0 / 0
21.08.2008, 15:20
    #35499565
Dihotom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы с Update
Chek_FedorНет так не заработает
Ну задайте этот вопрос в теме по SQL Server'у - там Вам быстро объяснят, что и как нужно скорректировать. Или вообще эту тему туда надо перекинуть - если по-хорошему :)
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Проблемы с Update / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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