Помогите начинающему.

From
Mike Kutuzov (2:5021/19.50)
To
Vladimir Ilyashenko
Date
2006-02-19T17:33:18Z
Area
SU.DBMS.SQL
Hi Vladimir!

Saturday February 18 2006 12:02, Vladimir Ilyashenko wrote to All:

 VI> ...
 VI> Поэтому - ногами не бить :)

Ну зачем же ;))

 VI> Помогите, пожалуйста, с таким вопросом:

 VI> Имею две таблицы:

 VI> TAB1
 VI> a        b       с (пусто и надо заполнить)
 VI> ...        ...
 VI> TAB2 (колонка x - уникальные номера)
 VI> ...       ...

 VI> Надо заполнить колонку TAB1.c  именами из колонки TAB2.y где TAB1.b =
 VI> TAB2.x В учебниках - вроде, все проще не придумаешь, а вот на практике
 VI> :( Пишу:
 VI> UPDATE TAB1 SET TAB1.с = TAB2.y WHERE TAB2.x  = TAB1.b;

Так и не будет работать нигде. Это не SQL.

 VI> Ответ:
 VI> "Слишком мало параметров. Требуется 2."

В Access-е такое сообщение обычно означает ошибку в написании имени столбца.

 VI> UPDATE TAB1
 VI> SET TAB1.с =
 VI> (SELECT TAB2.y
 VI> FROM TAB2
 VI> WHERE  TAB2.x = TAB1.b) ;

Вот это прошло бы в правильной реализации SQL. Можно было бы даже чуть проще:

update tab1
set c=(select y from tab2 where x = tab1.b)

Учти: если у тебя в TAB1 уже есть строки с заполненными C и с B, для которых нет парных X в TAB2, в них пропишется NULL. Если надо трогать только строки, для которых есть парные X в TAB2, то (опять же в правильной реализации SQL) надо вот так:

update tab1
set c=(select y from tab2 where x = tab1.b)
where exists (select null from tab2 where x = tab1.b)

 VI> Ответ: "В операции должен использоваться обновляемый запрос."

AFAIR в Access-е есть для такого специфический синтаксис (он и называется "обновляемый запрос"), который нормальные БД не понимают. Попробуй построить прямо в Access-е нужный запрос графически и поглядеть, какой SQL он изобразит. Под рукой сейчас Access-а нет, поэтому детальным "маршрутом" не помогу.

 VI> UPDATE TAB1  psevd
 VI> SET TAB1.с =
 VI> (SELECT TAB2.y
 VI> FROM TAB2
 VI> WHERE TAB2.x = psevd.b) ;
 VI> Ответ: "Слишком мало параметров. Требуется 1."

 VI> Понимаю, что чего-то не понимаю, а вот чего не понимаю - никак не
 VI> понимаю!

Главное, что ты пока не понимаешь: Access - это недоБД.

 VI> Подскажите, как это сделать? И в чем главная ошибка?

Если на Access-е свет клином не сошелся - уходи с него. Если сошелся - изучай и используй его кривости.

73!

-- Mike
   Знания, которыми мы не располагаем - обширны...
--- GoldED+/W32 1.1.4.7
 * Origin: Ничего личного. Такая работа (2:5021/19.50)
SEEN-BY: 46/50 50/12 450/1024 5000/5000 5010/53 5011/13 5012/46 5015/28
SEEN-BY: 5019/31 5020/545 715 4441 5021/2 13 19 20 25 29 5025/3 5026/10
SEEN-BY: 5027/12 5030/115 5035/38 5045/7 5053/16 5054/1 8 9 28 35 37 45 63 67
SEEN-BY: 5059/9 5077/70 5080/68 1003 5085/13 5095/20 6000/1 12
PATH: 5021/19 29 5020/545 5054/1 37