| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 | |
|
Guest
Сообщения: n/a
|
Предисловие:
Есть две таблицы - т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]) WHERE т1.номер = т2.номер Последний раз редактировалось ёшкина кошка; 28.05.2006 в 01:59. |
|
|
|
# 2 | |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Цитата:
|
|
|
|
|
|
# 4 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Вполне стандартная практика - добавляется запись в одну таблицу, потом определяется <ключ> этой новой записи первой таблицы, и делается вставка во вторую таблицу (т.к. об её обновлении речи конечно быть не может ввиду отсутствия во второй таблице ключа для связи).
INSERT таблица2(поле_значения, поле_связи) VALUES(значение, ключ) |
|
|
|
|
# 5 |
|
Guest
Сообщения: n/a
|
но как создать то самое ключевой поле...
например возьмем исходные данные: Изначально существует главная таблица - пусть будет "главная" - поля: номер, Date. На основе "главной" создаем таблицу "новая" так: SELECT главная.номер, Year(главная!Date) & Month(главная!Date) As Code INTO новая FROM главная Получаем таблицу "новая", состоящую из двух столбцов: номер, Code. Она связана с "главной" по полю "номер". подумала, что может добавить счетчик для каждой, но тогда, на мой взгляд, две проблемы: во-первых может не совпасть первоначальная связка по номерам и эти номера при добавлении будут продублированы (а должны быть уникальными), а во-вторых если в "главной" будет 50 записей по счетчику (после добавлений), а в "новой" останется 30, то у нас опять не хватает 20 ключей, их просто нет.... что-то у меня совсем мозги не работают... если есть время - объясните, пожалуйста, поподробнее
|
|
|
# 6 |
|
::VIP::
Регистрация: 19.03.2004
Сообщения: 1 329
![]() ![]() ![]() ![]() |
Похоже прежде чем решать конкретную проблему, надо разобраться с проектированием самой БД.
При таком создании "новой" таблицы получается связь один к одному, т.е. одной записи первой таблицы всегда соответствует одна запись другой. Встают вопросы: - А действительно ли необходимо тогда разносить данные по двум таблицам? Может просто добавить поле Code (ну или все необходимые поля) в первую и всё? Зачем нужны тут две таблицы? - Действительно ли между таблицами связь только один к одному, или возможны ситуации, когда несколько записей второй таблицы ссылаются на одну и ту же в первой? |
|
|
|
|
# 7 |
|
Guest
Сообщения: n/a
|
ВСЁЁ!
разобралась может кому-то поможет, вот как получилось: сначала добавляем ещё несуществующие номера в "новую" INSERT INTO новая ( номер ) SELECT номер FROM главная WHERE номер NOT IN (SELECT номер FROM новая) и потом это дело все обновляем: UPDATE главная LEFT JOIN новая ON главная.номер=новая.номер SET новая.Code = Year(главная!Date) & Month(главная!Date) ЕЖ, огромное Вам спасибо! Вы мои мысли в правильном направлении построили |
|
|
# 9 |
|
Guest
Сообщения: n/a
|
ну да, конечно можно, просто по пунктам понятнее
связь - 1 к 1, а данные разносить обязательно...потому что это работа связана с дипломным проектом и главная (будем так называть) таблица у нас как-будто есть...мы её получаем с помощью конвертирования отсканированного отчета... а все остальное, то что я добавляю для выполнения задания, естесственно я должна добавлять отдельными таблицами...иначе скажут, что "непрофессионально"
|