Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2011, 12:12   #1
hronos1975
 
Регистрация: 25.05.2010
Сообщений: 5
По умолчанию Откуда дубли при запросе?

Дано. Таблица на 2000 строк в Access, ее надо обьеденить по полю почтовые индексы с другой таблицей для вывода краев и районов страны в общем отображении. Сделал это через Мастер запросов. На выходе вместо 2000 получил 6000 записей. Возникла куча дубликатов, причем дубликаты не однородны, в запросе могут быть строчки и без дубликатов, а могут и с 10 дублирующими строчками. Что я сделал неправильно?
hronos1975 вне форума Ответить с цитированием
Старый 11.02.2011, 13:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Что я сделал неправильно?
почти на 100% Вы забыли указать условия связи между таблицами
(ну, добавили в запрос две таблицы (или одну и ту же - дважды), а установить реляцию (отношение) между соответствующими ключами этих таблицы забыли.

p.s. если не разберётесь,то перейдите в режим SQL, скопируйте запрос и давайте его сюда...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.02.2011, 13:39   #3
hronos1975
 
Регистрация: 25.05.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
почти на 100% Вы забыли указать условия связи между таблицами
(ну, добавили в запрос две таблицы (или одну и ту же - дважды), а установить реляцию (отношение) между соответствующими ключами этих таблицы забыли.

p.s. если не разберётесь,то перейдите в режим SQL, скопируйте запрос и давайте его сюда...
SELECT [AOK FIlialen].[1], [AOK FIlialen].Nazwanie, [AOK FIlialen].[Geschäftstelle typ], [AOK FIlialen].PLZ, [AOK FIlialen].Gorod, [AOK FIlialen].Uliza, [AOK FIlialen].Website, [AOK FIlialen].Telefon, [AOK FIlialen].Поле3, [AOK FIlialen].[Berater Name], [AOK FIlialen].[E-Mail], [AOK FIlialen].FaX, [AOK FIlialen].Öffnungszeiten, [AOK FIlialen].Stadtteil, [AOK FIlialen].[AOK Gruppe], [AOK FIlialen].Regionaldirektion, [AOK FIlialen].Postanschrift, [AOK FIlialen].Postfach, [AOK FIlialen].[Postfach Plz], [AOK FIlialen].Поле4, [AOK FIlialen].Postfachort, PLZ.Bundesland, PLZ.Landkreis
FROM PLZ INNER JOIN [AOK FIlialen] ON PLZ.PLZ = [AOK FIlialen].PLZ;

это то что нужно?
hronos1975 вне форума Ответить с цитированием
Старый 11.02.2011, 15:18   #4
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Код:
SELECT [AOK FIlialen].[1], 
[AOK FIlialen].Nazwanie, 
[AOK FIlialen].[Geschäftstelle typ], 
[AOK FIlialen].PLZ, 
[AOK FIlialen].Gorod, 
[AOK FIlialen].Uliza, 
[AOK FIlialen].Website, 
[AOK FIlialen].Telefon, 
[AOK FIlialen].Поле3, 
[AOK FIlialen].[Berater Name], 
[AOK FIlialen].[E-Mail], 
[AOK FIlialen].FaX, 
[AOK FIlialen].Öffnungszeiten, 
[AOK FIlialen].Stadtteil, 
[AOK FIlialen].[AOK Gruppe], 
[AOK FIlialen].Regionaldirektion, 
[AOK FIlialen].Postanschrift, 
[AOK FIlialen].Postfach, 
[AOK FIlialen].[Postfach Plz], 
[AOK FIlialen].Поле4, 
[AOK FIlialen].Postfachort, PLZ.Bundesland, PLZ.Landkreis
FROM PLZ INNER JOIN [AOK FIlialen] ON PLZ.PLZ = [AOK FIlialen].PLZ
[AOK FIlialen] --явные повторы

PLZ.PLZ ,PLZ.Bundesland, PLZ.Landkreis

повторны ли PLZ.PLZ
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 11.02.2011, 15:30   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

да нет, связь между таблицами есть...

Значит ошибка в логиге запроса и Вы получили в запросе ровно то, что и должны были получить...

разберитесь, что означает в Вашем случае (на логическом уровне) связь
PLZ.PLZ = [AOK FIlialen].PLZ

т.е что такое поле PLZ в таблице PLZ
и что такое поле PLZ в таблице [AOK FIlialen]

почему Вы считаете, что они связаны именно по этому полю.

p.s. При отладке удобно сделать тестовую базу, ну скажем пяток записей в одной таблице, десяток в другой.. тогда ясно можно на бумажке проследить, сколько строчек нужно получить в результирующей выборке!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.02.2011, 18:06   #6
hronos1975
 
Регистрация: 25.05.2010
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да нет, связь между таблицами есть...

Значит ошибка в логиге запроса и Вы получили в запросе ровно то, что и должны были получить...

разберитесь, что означает в Вашем случае (на логическом уровне) связь
PLZ.PLZ = [AOK FIlialen].PLZ

т.е что такое поле PLZ в таблице PLZ
и что такое поле PLZ в таблице [AOK FIlialen]

почему Вы считаете, что они связаны именно по этому полю.

p.s. При отладке удобно сделать тестовую базу, ну скажем пяток записей в одной таблице, десяток в другой.. тогда ясно можно на бумажке проследить, сколько строчек нужно получить в результирующей выборке!
PLZ это и есть почтовые индексы. Должно было получится на логическом уровне следущиее. Две таблицы[AOK FIlialen] и [PLZ]в запросе обьединяются через связь по полю почтовые индесы PLZ и из таблицы PLZ.PLZ добавляются два поля в запрос.
PLZ.Bundesland,= край,область
PLZ.Landkreis = район.
Как результат выбираются только те области и районы которые совпадают по почтовому индексу.Приходится чистить. Может кто проще посоветует как сделает без дублей?

Последний раз редактировалось hronos1975; 11.02.2011 в 21:46.
hronos1975 вне форума Ответить с цитированием
Старый 11.02.2011, 18:25   #7
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Цитата:
Сообщение от hronos1975 Посмотреть сообщение
PLZ это и есть почтовые индексы. Должно было получится на логическом уровне следущиее. Две таблицы[AOK FIlialen] и [PLZ]в запросе обьединяются через связь по полю почтовые индесы PLZ и из таблицы PLZ.PLZ добавляются два поля в запрос.
PLZ.Bundesland,= край,область
PLZ.Landkreis = район.
Как результат выбираются только те области и районы которые совпадают по почтовоПриходится чистить. Может кто проще посоветует как сделает без дублей?
Попробуйте заменить эту строку
FROM PLZ RIGHT JOIN [AOK FIlialen] ON PLZ.PLZ = [AOK FIlialen].PLZ;
т.е. выбрать все записи таблицы AOK FIlialen и только те записи которые совпадают в таблице PLZ


Но все же лучше приложили бы кусок своего файла
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 11.02.2011, 19:14   #8
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,077
По умолчанию

Цитата:
Сообщение от hronos1975 Посмотреть сообщение
Дано. Таблица на 2000 строк в Access, ее надо обьеденить по полю почтовые индексы с другой таблицей для вывода краев и районов страны в общем отображении.
я не знаю перевода слов, но как минимум

Код:
SELECT first(a.[1]) as p1, 
first(a.Nazwanie) as pnazwanie, 
first(a.[Geschäftstelle typ]) as pges, 
a.PLZ, 
first(a.Gorod) as pgorod, 
first(a.Uliza) as puliza, 
first(a.Website) as pwebs, 
first(a.Telefon) as ptel, 
first(a.Поле3) as p3, 
first(a.[Berater Name]) as pberater, 
first(a.[E-Mail]) as pemail, 
first(a.FaX) as pfax, 
first(a.Öffnungszeiten) as poff, 
first(a.Stadtteil) as pstadt, 
first(a.[AOK Gruppe]) as pgruppa, 
first(a.Regionaldirektion) as pregDir, 
first(a.Postanschrift) as ppostanschrift, 
first(a.Postfach) as ppostFach, 
first(a.[Postfach Plz]) as ppostfach_plz, 
first(a.Поле4) as p4, 
first(a.Postfachort) as ppostfachort,
PLZ.Bundesland, PLZ.Landkreis
FROM PLZ INNER JOIN first([AOK FIlialen] a
ON PLZ.PLZ = a.PLZ
хотя возможно все строки с first(телефон-факс-вебсайт очевидно не имеют отношения к почтовой адресации) и не нужны, если надо получить типа Ивановская обл\Шуя\
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли при пост-запросе InDy получить только куки (при логине на сайт например)? TwiX Работа с сетью в Delphi 2 07.02.2010 08:21
Зависание при пост запросе Фенрир Работа с сетью в Delphi 1 14.12.2009 15:18
Перенаправление при пост запросе. TwiX Работа с сетью в Delphi 2 03.12.2009 17:09
Ошибка при запросе SQL в IB Алекс1 БД в Delphi 2 24.06.2007 22:37