Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переписать запрос, update, oracle,sql  
:(
    Опции темы
andriy89
Дата 10.4.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 2.5.2011

Репутация: нет
Всего: нет



Добрый день. Помогите пожалуйста переделать запрос так, чтобы он срабатывал и на SQL Server и на Oracle.

Код

UPDATE t1
SET t1.col1 = t2.col1, t1.col2 = t2.col2
FROM table1 t1
JOIN table2 t2 ON t1.id = t2.id


p.s. сам надумал только вот такого плана:

Код

UPDATE (SELECT col1, col2 
         FROM table1 t1 
         JOIN table2 t2 ON t1.id = t2.id) t3 
SET t3.col1 = t2.col1, t3.col2 = t2.col2


Это сообщение отредактировал(а) andriy89 - 11.4.2012, 07:06
PM MAIL   Вверх
Akina
Дата 11.4.2012, 08:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Код

UPDATE t1, t2
SET t1.col1 = t2.col1, t1.col2 = t2.col2
WHERE t1.id = t2.id



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 11.4.2012, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Akina, оракл вообще не умеет жойн в апдейте, делите

В оракле применяют либо тот подход, который использовал ТС, либо
Код

update tab1 t1
  set (col1,col2) = (select col1,col2 from tab2 t2 where t1.id = t2.id)
  where id in (select id from tab2)


Цитата(andriy89 @  11.4.2012,  00:02 Найти цитируемый пост)
только вот такого плана:

нормально smile 
только синтаксически не корректно и на MS SQL 2к у мну не получилось такой подход исопльзовать. smile 

Может посмотреть в сторону merge? Ваша версия MSSQL его потдерживает?

Код

merge into tab1 t1
  using (select t2.* from tab2 t2
         --inner join tab1 t1 on t1.id = t2.id
        ) t2
  on (t1.id = t2.id)
  when matched then update set t1.col1 = t2.col1
                               ,t1.col2 = t2.col2
  --when not matched then insert (id) values (null)

* коментарии убрать для совместимости с 9й версией оркала


Это сообщение отредактировал(а) Zloxa - 11.4.2012, 09:39


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
andriy89
Дата 11.4.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 2.5.2011

Репутация: нет
Всего: нет



merge использовать не желательно smile

а что с синтаксической точки зрения неправильно в моей второй версии ?
PM MAIL   Вверх
Zloxa
Дата 12.4.2012, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(andriy89 @  11.4.2012,  20:24 Найти цитируемый пост)
а что с синтаксической точки зрения неправильно в моей второй версии ? 

1) col1, col2 в подзапросе не одназначно трактуются. Не понятно должны ли они быть возвращены из множетсва t1 или же t2
2) алиас t2 не может быть использован вне подзапроса t3

Если бы вы хоть попытались запустить этот подзапрос, вам то же самое расказал бы синтаксический анализатор.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0452 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.