imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 27.05.2006, 23:15     # 1
ёшкина кошка
Guest
 
Сообщения: n/a

Question Нужна помощь по составлению запроса на обновление

Предисловие:

Есть две таблицы - т1 главная и т2 подчиненная.
Связаны по номеру.

т2 была создана в аксессе для всех существующих записей в таблице т1. Состоит из двух столбцов:
1) первый столбец - номер, по которому связаны т1 и т2,
2) второй - число, которое формируется, например, по дате из таблицы т1 по принципу "yyyymm".

И теперь, когда в главную таблицу добавляем записи, в подчиненной столбцы с 5-ти значным номером ещё пустые.

Пробовала обновлять так:
UPDATE т2 SET число = Year([т1]![Date]) & Month([т1]![Date]) & [statemnt_ID]![ID] WHERE т1.номер = т2.номер
В результате новые записи из таблицы т1 не были включены в результат...

Вопрос:
Как правильно составить запрос на обновление подчиненной таблицы т2?

Цитата:
UPDATE т2 SET число = Year([т1]![Date]) & Month([т1]![Date]) & [statemnt_ID]![ID] WHERE т1.номер = т2.номер
на [statemnt_ID]![ID] не обращайте внимания...я свой запрос упрощала и не заметила, чт осталось лишнее.
Правильно будет так:
UPDATE т2 SET число = Year([т1]![Date]) & Month([т1]![Date]) WHERE т1.номер = т2.номер

Последний раз редактировалось ёшкина кошка; 28.05.2006 в 01:59.
 
Старый 27.05.2006, 23:36     # 2
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Цитата:
ёшкина кошка:
И теперь, когда в главную таблицу добавляем записи, в подчиненной столбцы с 5-ти значным номером ещё пустые.
Не в этом ли причина? В первую таблицу идет именно добавление? Если так, то в первой таблице у новой записи будет новый номер, которому во второй таблице для связи по условию т1.номер = т2.номер взяться неоткуда.
ЕЖ вне форума  
Старый 27.05.2006, 23:54     # 3
ёшкина кошка
Guest
 
Сообщения: n/a

да...я вот об этом и пытаюсь спросить....как же все-таки обновить...
не вручную же эти номера, по которым потом будем связывать, во вторую таблицу добавлять
 
Старый 28.05.2006, 00:16     # 4
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Вполне стандартная практика - добавляется запись в одну таблицу, потом определяется <ключ> этой новой записи первой таблицы, и делается вставка во вторую таблицу (т.к. об её обновлении речи конечно быть не может ввиду отсутствия во второй таблице ключа для связи).

INSERT таблица2(поле_значения, поле_связи) VALUES(значение, ключ)
ЕЖ вне форума  
Старый 28.05.2006, 00:47     # 5
ёшкина кошка
Guest
 
Сообщения: n/a

но как создать то самое ключевой поле...

например возьмем исходные данные:
Изначально существует главная таблица - пусть будет "главная" - поля: номер, Date.
На основе "главной" создаем таблицу "новая" так:

SELECT главная.номер, Year(главная!Date) & Month(главная!Date) As Code INTO новая
FROM главная

Получаем таблицу "новая", состоящую из двух столбцов: номер, Code.
Она связана с "главной" по полю "номер".


подумала, что может добавить счетчик для каждой, но тогда, на мой взгляд, две проблемы:
во-первых может не совпасть первоначальная связка по номерам и эти номера при добавлении будут продублированы (а должны быть уникальными),
а во-вторых если в "главной" будет 50 записей по счетчику (после добавлений), а в "новой" останется 30, то у нас опять не хватает 20 ключей, их просто нет....

что-то у меня совсем мозги не работают...
если есть время - объясните, пожалуйста, поподробнее
 
Старый 28.05.2006, 01:06     # 6
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Похоже прежде чем решать конкретную проблему, надо разобраться с проектированием самой БД.

При таком создании "новой" таблицы получается связь один к одному, т.е. одной записи первой таблицы всегда соответствует одна запись другой. Встают вопросы:
- А действительно ли необходимо тогда разносить данные по двум таблицам? Может просто добавить поле Code (ну или все необходимые поля) в первую и всё? Зачем нужны тут две таблицы?
- Действительно ли между таблицами связь только один к одному, или возможны ситуации, когда несколько записей второй таблицы ссылаются на одну и ту же в первой?
ЕЖ вне форума  
Старый 28.05.2006, 01:17     # 7
ёшкина кошка
Guest
 
Сообщения: n/a

ВСЁЁ! разобралась

может кому-то поможет, вот как получилось:

сначала добавляем ещё несуществующие номера в "новую"
INSERT INTO новая ( номер ) SELECT номер FROM главная
WHERE номер NOT IN (SELECT номер FROM новая)

и потом это дело все обновляем:
UPDATE главная LEFT JOIN новая ON главная.номер=новая.номер
SET новая.Code = Year(главная!Date) & Month(главная!Date)


ЕЖ, огромное Вам спасибо! Вы мои мысли в правильном направлении построили
 
Старый 28.05.2006, 01:32     # 8
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
Всё это можно было и в одном INSERT сделать, без UPDATE.

И потом так и не понятно осталось по связям - 1-1 или 1-* ?
ЕЖ вне форума  
Старый 28.05.2006, 01:40     # 9
ёшкина кошка
Guest
 
Сообщения: n/a

ну да, конечно можно, просто по пунктам понятнее

связь - 1 к 1, а данные разносить обязательно...потому что это работа связана с дипломным проектом и главная (будем так называть) таблица у нас как-будто есть...мы её получаем с помощью конвертирования отсканированного отчета...
а все остальное, то что я добавляю для выполнения задания, естесственно я должна добавлять отдельными таблицами...иначе скажут, что "непрофессионально"
 
Старый 28.05.2006, 01:50     # 10
ЕЖ
::VIP::
 
Регистрация: 19.03.2004
Сообщения: 1 329

ЕЖ Бог с наворотамиЕЖ Бог с наворотами
ЕЖ Бог с наворотамиЕЖ Бог с наворотами
По поводу "профессионально" - с точки зрения проектирования БД я бы поспорил со всеми приведенными доводами, но с точки зрения дипломного проектирования - вам виднее
ЕЖ вне форума  
Старый 28.05.2006, 01:55     # 11
ёшкина кошка
Guest
 
Сообщения: n/a

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

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:54.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.