Форум: "Базы";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
ВнизUpdate с использованием двух таблиц Найти похожие ветки
← →
WondeRu © (2005-10-13 11:12) [0]Здравствуйте, уважаемые!
Cитуация:
есть таблицы:tab1(id, name)
tab2(newid, oldid, newname)
надо сделать так, чтоб если id=oldid, то id заменялся на newid, а name на newname.
вот мой код... но он неверенupdate tab1
set id=tab2.newid, name=tab2.newname
where id=tab2.oldid
Подскажите, как написать такой запрос?
← →
Seg (2005-10-13 11:17) [1]База какая?
← →
WondeRu © (2005-10-13 11:19) [2]FireBird 1.5
← →
Johnmen © (2005-10-13 11:31) [3]
update tab1
set
tab1.id=(SELECT tab2.newid FROM tab2 WHERE tab1.id=tab2.oldid),
tab1.name=(SELECT tab2.newname FROM tab2 WHERE tab1.id=tab2.oldid)
← →
WondeRu © (2005-10-13 11:48) [4]Johnmen © (13.10.05 11:31) [3]
не получится... tab1 содержит записи, которые не должны быть обработаны (нет их соотвествий в tab2)
← →
Seg (2005-10-13 11:51) [5]В FireBird есть триггеры?
← →
Johnmen © (2005-10-13 11:54) [6]
> WondeRu © (13.10.05 11:48) [4]
> не получится... tab1 содержит записи, которые не должны
> быть обработаны (нет их соотвествий в tab2)
+WHERE EXISTS (SELECT 0 FROM tab2 WHERE tab1.id=tab2.oldid)
← →
Sergey13 © (2005-10-13 11:57) [7]2 [4] WondeRu © (13.10.05 11:48)
Ну добавь для верности к update
where exist (SELECT 1 FROM tab2 WHERE tab1.id=tab2.oldid)
← →
WondeRu © (2005-10-13 11:58) [8]Johnmen © (13.10.05 11:54) [6]
неа:The insert failed because a column definition includes validation constraints. validation error for column NAME, value "*** null ***".
← →
WondeRu © (2005-10-13 12:00) [9]Sergey13 © (13.10.05 11:57) [7]
аналогично...
← →
Johnmen © (2005-10-13 12:09) [10]>WondeRu © (13.10.05 11:58) [8]
>неа:>The insert failed because a column definition includes validation constraints.
>validation error for column NAME, value "*** null ***".
Попробуй перевести с аглицкого.
И тогда м.б. поймешь, что твоя проблема в метаданных и данных таблиц...
← →
WondeRu © (2005-10-13 13:48) [11]Общими усилиями получили конечный вариант:
update tab1
set
tab1.name=(SELECT tab2.newname FROM tab2 WHERE tab1.id=tab2.oldid), /* ставится на 1 место, чтоб tab1.id был пока прежним */
tab1.id=(SELECT tab2.newid FROM tab2 WHERE tab1.id=tab2.oldid)
WHERE
EXISTS (SELECT 1 FROM tab2 WHERE tab1.id=tab2.oldid)
Всем спасибо!!!
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c