|
|
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. Подскажите пожалуйста как организовать запрос типа: update Table1 set table1.text1=table2.text2 where x1 in (select x1 from table2) нужно заменить поле text1 в таблице text1 на данные находящиеся в поле text2 таблицы table2 соответственно. Приведенный выше запрос не работает. Заранее СПАСИБО! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 13:59 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 15:18 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Прошу прощения за тупость но мне не совсем понятно 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 это номер (например ИНН) а не наоборот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 16:18 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
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 .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 16:31 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Теперь уже не понял я. У Вас одной строке с конкретным значением поля_x в таблице table1 соответствует несколько строк таблицы table2 с этим же значением в поле_x? Т.е. ситуация, примерно, такая? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 16:40 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Эту проблему я решил 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 16:51 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Вы мои-то вопросы видели? Можете тестовый пример с данными привести, на которых ошибка проявляется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 16:57 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
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 списка значений... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 17:26 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Chek_Fedorс присвоением полю text1 списка значений... Я для этого и просил тестовые данные. Как Вы себе представляете запись в атомарное поле списка значений атомарных полей ? Что Вы хотите в результате получить? Прошу же написать пару строк из каждой таблицы и то, что Вы хотите видеть в результате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 17:38 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
tabl1 Поле_x ....... text1 131333 ....... xxxx 373627 ....... xqqq ......................... 131313 ....... Null tabl2 Поле_x ....... text2 131333 ....... 23fmkd 373627 ....... iutnccn ............................ результат tabl1 Поле_x ....... text1 131333 ....... 23fmkd 373627 ....... iutnccn ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 17:50 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Подозреваю, что у Вас в table2 есть строки с одинаковыми значениями в Поле_x. Т.е. пример можно дополнить, например, так: tabl2 Поле_x ....... text2 131333 ....... 23fmkd 373627 ....... iutnccn ............................ 373627 ....... qwerty Есть такие дубликаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 17:54 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Есть но я их отфильтровал по полю text2 там стоит null после выполнения запроса where поле_x in (select поле_x from table1)and (text2 is not null) дубли исчезают читайте выше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 18:08 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Chek_FedorЕсть но я их отфильтровал по полю text2 там стоит null после выполнения запроса where поле_x in (select поле_x from table1)and (text2 is not null) дубли исчезают читайте выше Где это у Вас выше условие "text2 is not null"? У Вас там везде "поле_x is not null". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 09:17 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Блин ошибся! Правильно 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) и в наглую вставить из новой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 12:19 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 12:23 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Что такое t1. да и еще названия полей значения которых нужно поменять одинаковые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 12:34 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Chek_FedorЧто такое t1. да и еще названия полей значения которых нужно поменять одинаковые. t1 -псевдоним (alias). Что одинаковое? text1 из table1 и text2 из table2 одинковые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 13:17 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
----Что одинаковое? text1 из table1 и text2 из table2 одинковые? да text1 из table1 и text2 из table2 одинаковые названия полей (это только в одном случае), а вообще названия могут в корне не совпадать. А псевдоним, его нужно объявить? Как? запрос выполняется из Query Analyzer (если это имеет значение). Вы вообще пробовали выполнить подобный запрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 14:01 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Код: 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. Результат такой нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 14:13 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Все в точности так только там ошибочки у Вас вместо 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'. Прошу прощения за тупость ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 14:56 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Это не ошибочки, просто у Вас, судя по всему, SQL Server, а у меня - Oracle. Видимо, синтаксис с псевдонимом нестандартный и является фишкой Oracle. Интересно, а так заработает? Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 15:07 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Блин конечно у меня MS SQL Server 2000 И что делать? Огромное Вам спасибо, буду ручками править ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 15:10 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Нет так не заработает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 15:18 |
|
||
|
Проблемы с Update
|
|||
|---|---|---|---|
|
#18+
Вы предложенный вариант без псевдонима попробовали запустить? Ручками - это, конечно, выход. Но никак не в этой ситуации. Запрос ерундовый совершенно - просто нужно Оракловый синтаксис переложить на MS. Наверняка последний вариант уже заработает - попробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2008, 15:19 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35499510&tid=1345075]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
193ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 483ms |

| 0 / 0 |
