Модераторы: Akina
  

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Связь по нескольким полям, Потеря нужных записей!!!! 
:(
    Опции темы
ElenaG
Дата 14.2.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.2.2005

Репутация: нет
Всего: нет



При связи в запросе на выборку 2 таблиц по нескольким полям (Улица, дом, буква, корпус, квартира), выбираются записи только со всеми заполненными полями, а если адрес не содержит корпуса, запись теряется. Как быть????
PM MAIL ICQ   Вверх
boevik
Дата 14.2.2005, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: нет
Всего: 35



Вместо INNER JOIN использовать LEFT/RIGHT JOIN


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 14.2.2005, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(ElenaG @ 14.2.2005, 16:55)
При связи в запросе на выборку 2 таблиц по нескольким полям (Улица, дом, буква, корпус, квартира),

Пересмотрите структуру базы - она неправильная. Связи должны быть только одного типа:

Уникальный ID одной таблицы <- один ко много -> Референсный ID в другой таблице

Связи иного типа обоснованы крайне редко и на очень сложных структурах.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ElenaG
Дата 14.2.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.2.2005

Репутация: нет
Всего: нет



Это помогает только при связи по одному полю, а если связывать 2 и более полей, то записи теряются((
Добавлено @ 16:25
Цитата(Akina @ 14.2.2005, 16:12)
Цитата(ElenaG @ 14.2.2005, 16:55)
При связи в запросе на выборку 2 таблиц по нескольким полям (Улица, дом, буква, корпус, квартира),

Пересмотрите структуру базы - она неправильная. Связи должны быть только одного типа:

Уникальный ID одной таблицы <- один ко много -> Референсный ID в другой таблице

Связи иного типа обоснованы крайне редко и на очень сложных структурах.

Я пытаюсь "пересечь" 2 разные базы данных.
Есть одна таблица с адресом и вторая с адресом и телефоном, мне надо при совпадении адреса добавить тел. в первую таблицу.
PM MAIL ICQ   Вверх
Akina
Дата 14.2.2005, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



ElenaG
Повторяю - не используйте для связи несколько полей. Как, впрочем, и составные вычисляемые поля.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ElenaG
Дата 14.2.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.2.2005

Репутация: нет
Всего: нет



Цитата(Akina @ 14.2.2005, 16:26)
ElenaG
Повторяю - не используйте для связи несколько полей. Как, впрочем, и составные вычисляемые поля.

А как тогда я идентифицирую адеса????

PM MAIL ICQ   Вверх
Akina
Дата 14.2.2005, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Разделите каждую из таблиц на часть "Адрес" и часть "Все остальное", введя ID адреса, причем из одной путем CREATE TABLE, а из другой APPEND TABLE в созданную ранее. На основании Count>1 произведите замену (быстрее программно) ID во второй таблице на меньший. В результате получите 1 таблицу Адрес и 2 связанные с ней таблицы. Остальное элементарно.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ElenaG
Дата 14.2.2005, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.2.2005

Репутация: нет
Всего: нет



Цитата(Akina @ 14.2.2005, 16:36)
Разделите каждую из таблиц на часть "Адрес" и часть "Все остальное", введя ID адреса, причем из одной путем CREATE TABLE, а из другой APPEND TABLE в созданную ранее. На основании Count>1 произведите замену (быстрее программно) ID во второй таблице на меньший. В результате получите 1 таблицу Адрес и 2 связанные с ней таблицы. Остальное элементарно.

А как это сделать программно? smile
Добавлено @ 16:51
и еще одна проблема: в 1-ой таблице уже 4850000 записей smile
PM MAIL ICQ   Вверх
Akina
Дата 14.2.2005, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 454



Цитата(ElenaG @ 14.2.2005, 17:49)
А как это сделать программно?

Не знаете... ну тогда делаем запросами...

1) Создали мы таблицу адресов

ID
Улица
Дом
.....

2) Добавляем временное поле

ID
Улица
Дом
.....
RefID

3) Копируем в новое поле значения

SET RefID=Min(ID) Group By (Улица+Дом+...)

4) Корректируем ссылки во 2 связанной таблице

Set Таблица2!AddrID=Адресав!RefID

5) Меняем связь к полю ID на связь к полю RefID

6) Убиваем поле ID - за ненадобностью.

Все...

Цитата(ElenaG @ 14.2.2005, 17:49)
еще одна проблема:

Это не проблема...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
ElenaG
Дата 14.2.2005, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 14.2.2005

Репутация: нет
Всего: нет



Спасибо. Попробую.
PM MAIL ICQ   Вверх
Impulse
Дата 22.2.2005, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 5.1.2005
Где: г. Чита

Репутация: нет
Всего: нет



Akina что мне это все не нравится. Слишком просто. И в частности Count(Адрес) > 1, где адрес составное значение полей, и где это здесь ->
Цитата(Akina @ 14.2.2005, 22:57)
ну тогда делаем запросами...


PM MAIL ICQ   Вверх
  
Закрытая темаСоздание новой темы Создание опроса
Правила форума "MS Access"
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »


 




[ Время генерации скрипта: 0.1063 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.