Помогите начинающему.
- 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