update & Informix
3 отговора
153 прегледа
update & Informix
Здравейте, имам проблем със заявка, надявам се някой с опит в Информикс да може да помогне.
Заявката е от следния тип:
UPDATE tab1 SET tab1.a = tab2.a FROM tab1, tab2
WHERE tab1.b = tab2.b
Това е заявка, която без никакъв проблем може да се изпълни в MS SQL и също така ето тук се твърди, че може да се изпълни и под Informix DS v.10. Аз обаче работя с по-стара версия и там не минава номера с този синтаксис.
Някой може ли да подскаже?
Заявката е от следния тип:
UPDATE tab1 SET tab1.a = tab2.a FROM tab1, tab2
WHERE tab1.b = tab2.b
Това е заявка, която без никакъв проблем може да се изпълни в MS SQL и също така ето тук се твърди, че може да се изпълни и под Informix DS v.10. Аз обаче работя с по-стара версия и там не минава номера с този синтаксис.
Някой може ли да подскаже?
Re: update & Informix
UPDATE tab1
SET tab1.a = (
select tab2.a
FROM tab1, tab2
WHERE tab1.b = tab2.b
)
where .....
При това селекта трябва да връща една единствена стойност.
Re: update & Informix
Благодаря за отговора, това беше първото, което опитах, обаче не става, защото "Cannot modify table or view used in subquery" - поради което не можах да измисля как да върна единствена стойност.
Сега ми хрумна да копирам tab1 във временна таблица и да направя join един път в подзаявката към временната таблица и в същото време- в where условието. Което не съм много сигурна дали ще работи, а и едва ли е добро решение...
Сега ми хрумна да копирам tab1 във временна таблица и да направя join един път в подзаявката към временната таблица и в същото време- в where условието. Което не съм много сигурна дали ще работи, а и едва ли е добро решение...
Re: update & Informix
UPDATE tab1
SET tab1.a = (
select tab2.a
FROM tab2
WHERE tab1.b1 = tab2.b2
)
where .....
Ето така вече работи. Update-ваната таблица не трябва да се указва явно в subquery-то, а полетата, по които се прави join трябва да са просто с различни имена. Даже префиксите за имента на таблиците не се указват явно, но тук ги написах за яснота
SET tab1.a = (
select tab2.a
FROM tab2
WHERE tab1.b1 = tab2.b2
)
where .....
Ето така вече работи. Update-ваната таблица не трябва да се указва явно в subquery-то, а полетата, по които се прави join трябва да са просто с различни имена. Даже префиксите за имента на таблиците не се указват явно, но тук ги написах за яснота