Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/64: Рейтинг темы: голосов - 64, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11

объединение нескольких таблиц с одной (JOIN)

12.08.2013, 21:35. Показов 11974. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть таблица
контакт(код, фио)

с ней связаны три таблицы:
телефон (код, номер, код контакта);
емайл (код, адрес, код контакта);
скайп (код, адрес, код контакта);

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

например если каждая таблица (телефон скайа емайл) содержит записи:
1
2
3

то результат получиться приблизительно такой
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
и т.д. всего 27 записей 3*3*3 и каждая уникальна (distinct'ы не помогают)

SQL
1
2
3
4
5
6
7
8
SELECT DISTINCT Телефоны.Номер AS Тел, email.Адрес AS почта, Skype.Адрес AS скайп
FROM Skype RIGHT JOIN 
(Телефоны RIGHT JOIN 
(email RIGHT JOIN 
Контакты ON email.[Код контакта] = Контакты.Код)
ON Телефоны.[Код контакта] = Контакты.Код)
ON Skype.[Код контакта] = Контакты.Код
WHERE (((Контакты.Код)=[Отчеты]![ЗаявкаЭкспедитор]![Ответственное лицо]));
тоже самое и c INNER'ом и с LEFT'ом (только таблицы местами меняются)

а мне нужно чтобы результат был приблизительно такой:
1 1 1
2 2 2
3 3 3

а в случае если телефонов больше чем емайлов и скайпов, то просто бы вставлялись пустые строки в соответствующие столбцы.

уффф.... надеюсь понятно нарисовал ситуацию. помогите пожалуйста решить проблему.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2013, 21:35
Ответы с готовыми решениями:

Объединение нескольких таблиц
Здравствуйте, делаю базу по продажам комплектующих для ПК. Для удобства просмотра информации сделал для каждого вида комплектующих...

Объединение нескольких таблиц
Доброго времени суток, товарищи. Помогите разобраться с БД. Необходимо создать объединение нескольких таблиц(результатом должна быть...

Объединение таблиц с выбором нескольких данных по id
Здравствуйте, Уважаемые форумчане) Возник вопрос в связи с расширением списка хранящихся данных по сотрудникам. Есть 2 таблицы: ...

18
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.08.2013, 22:01
Возможно такой запрос нужен
SQL
1
2
3
SELECT Телефоны.Номер AS Тел, email.Адрес AS почта, Skype.Адрес AS скайп
FROM ((Контакты LEFT JOIN email ON Контакты.Код = email.Код_Контакта) LEFT JOIN Skype ON Контакты.Код = Skype.Код_Контакта) LEFT JOIN Телефоны ON Контакты.Код = Телефоны.Код_Контакта
WHERE (((Контакты.Код)=[Отчеты]![ЗаявкаЭкспедитор]![Ответственное лицо]));
0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
12.08.2013, 22:18  [ТС]
SQL
1
2
3
4
5
6
SELECT  Телефоны.Номер AS Тел, email.Адрес AS почта, Skype.Адрес AS скайп
FROM
((Контакты LEFT JOIN email ON Контакты.Код = email.[Код контакта])
LEFT JOIN Skype ON Контакты.Код = Skype.[Код контакта])
LEFT JOIN Телефоны ON Контакты.Код = Телефоны.[Код контакта]
WHERE (((Контакты.Код)=[Отчеты]![ЗаявкаЭкспедитор]![Ответственное лицо]));

Тел___почта___скайп
номер 1адрес 1скайп 1
номер 2адрес 1скайп 1
номер 1адрес 1скайп 2
номер 2адрес 1скайп 2
номер 1адрес 2скайп 1
номер 2адрес 2скайп 1
номер 1адрес 2скайп 2
номер 2адрес 2скайп 2
номер 1адрес 3скайп 1
номер 2адрес 3скайп 1
номер 1адрес 3скайп 2
номер 2адрес 3скайп 2


результат тот же(((

Добавлено через 6 минут
в моем случае номеров-2, почт-3, скайпов-2. итого записей 2*3*2=12. а мне бы хотелось три записи (в данном случае)

Телпочтаскайп
номер 1адрес 1скайп 1
номер 2адрес 2скайп 2
NULLадрес 3NULL
0
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
12.08.2013, 22:24
sirtimon - Попробуйте в запросе поэксперементировать со связями на - Объединение (Стрелочки в связях)
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.08.2013, 22:28
Странно, посмотрите похожее вложение - все нормально (5 контактов - 5 записей). Условия Вашего, естественно нет.
Вложения
Тип файла: 7z Database14.7z (16.0 Кб, 21 просмотров)
0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
12.08.2013, 22:38  [ТС]
Цитата Сообщение от kmv-puh Посмотреть сообщение
sirtimon - Попробуйте в запросе поэксперементировать со связями на - Объединение (Стрелочки в связях)
перепробовал все результат - либо ошибка либо тоже самое
0
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
12.08.2013, 22:43
Значит связи как то не правильно создали
0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
12.08.2013, 22:46  [ТС]
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Странно, посмотрите похожее вложение - все нормально (5 контактов - 5 записей). Условия Вашего, естественно нет.
в Вашем пример на один контакт приходится по одному телефону, емайлу, скайпу... добавьте скажем еще один номер к контакту, и запрос 2 раза выдаст как сам контакт так и емайл и скайп.
КодФИОПочтаТелефонСкайп
1ф1п1т1 
1ф1п1-2т1 
1ф1п1-3т1 
2ф2 т2с2
3ф3п3т3 
4ф4 т4с4
5ф5п5т5с5
обратите внимание на первые 3 записи

Добавлено через 3 минуты
Цитата Сообщение от kmv-puh Посмотреть сообщение
Значит связи как то не правильно создали
да у меня тоже самое что и в примере ltv_1953
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.08.2013, 22:47
Увы, перебор возникает.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
12.08.2013, 22:57
Если требуется только одно, например первое значение телефонов, скайпов, почт, то нужен запрос с группировкой.
SQL
1
2
3
4
5
6
7
8
SELECT Контакты.Код, Контакты.ФИО , 
    FIRST(Почты.Почта) AS Почта1, FIRST(Телефоны.Телефон) AS Телефон1, FIRST(Скайпы.Скайп) AS Скайп1
FROM ((Контакты 
    LEFT JOIN Почты ON Контакты.Код = Почты.Контакт) 
    LEFT JOIN Скайпы ON Контакты.Код = Скайпы.Контакт) 
    LEFT JOIN Телефоны ON Контакты.Код = Телефоны.Контакт
WHERE (((Контакты.Код)=[Отчеты]![ЗаявкаЭкспедитор]![Ответственное лицо]))
GROUP BY Контакты.Код, Контакты.ФИО
Если же нужны все значения, то ищите по форуму на ключевое слово "конкатенация"
1
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
12.08.2013, 23:07
lУвы, что у - tv_1953, посмотреть не можу, у меня 2000,
А, ну уж если и у него переборчик, то тогда даже и не знаю, может группитровать попробовать?

Добавлено через 9 минут
А я понял кажется из за чего, у Вас во всех таблицах имеется Имя - код, попробуйте изменить их типа - КодФИО, КодТел, КодЭмайл, КодЭлАдрес
0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
12.08.2013, 23:12  [ТС]
может я вопрос не правильно ставлю... попробую спросить иначе.
мне известен код контакта. и мне теперь нужно получить список всех его телефонов, скайпов, емайлов.
в принципе это три разных запроса, но я хотел создать подчиненную форму(в режиме таблицы) в отчете. поэтому решил что мне нужен один запрос чтобы использовать как источник данных для формы.
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.08.2013, 23:13
Возможен вариант со сводной таблицей - но это если только посмотреть. Запрос Значения_ в режиме сводной.
Вложения
Тип файла: 7z Database15.7z (17.8 Кб, 11 просмотров)
0
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
12.08.2013, 23:13
Да и поля - "код контакта" не мешало бы изменить типа на - КодКонтактаТ, КодКонтактаЭ, КодКонтактаП
1
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
12.08.2013, 23:16
Цитата Сообщение от sirtimon Посмотреть сообщение
но я хотел создать подчиненную форму(в режиме таблицы) в отчете. поэтому решил что мне нужен один запрос чтобы использовать как источник данных для формы.
Сделайте три рядом, и никаких сложных запросов не понадобится.
1
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
12.08.2013, 23:44  [ТС]
Цитата Сообщение от kmv-puh Посмотреть сообщение
Да и поля - "код контакта" не мешало бы изменить типа на - КодКонтактаТ, КодКонтактаЭ, КодКонтактаП
ни к чему не привело(

Добавлено через 4 минуты
Цитата Сообщение от ltv_1953 Посмотреть сообщение
Сделайте три рядом, и никаких сложных запросов не понадобится.
наверное так и сделаю. придется подчиненную форму из подчиненных форм делать, а то максимальное количество подчиненных объектов - 10 (насколько мне известно)

Добавлено через 11 минут
всем спасибо за участие. но вопрос с объединением без перебора остается открытым. возможно ли вообще такое!?
0
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
12.08.2013, 23:59
sirtimon - Может типа так нужно, соответственнр и отчет аналогично сделать
Вложения
Тип файла: rar Контакты.rar (13.6 Кб, 13 просмотров)
0
 Аватар для VinniPuh
9128 / 6130 / 593
Регистрация: 27.03.2013
Сообщений: 19,974
13.08.2013, 00:25
sirtimon - А еще лучше думается все в одной таблице хранить, просто добавить - Вид контакта. Ведь у Вас могут быть не только эти 3 вида контакта, потом еще захотите что то добавить и придется еще 1 подчиненную форму создавать и еще, а форма не безразмерная. Посмотрите пример-2
Вложения
Тип файла: rar Контакты-2.rar (15.2 Кб, 14 просмотров)
0
Эксперт MS Access
 Аватар для ltv_1953
17536 / 7288 / 1663
Регистрация: 21.06.2012
Сообщений: 13,957
13.08.2013, 00:32
Цитата Сообщение от sirtimon Посмотреть сообщение
но вопрос с объединением без перебора остается открытым. возможно ли вообще такое!?
По запросу - mobile уже написал о возможном варианте.
Если сводная не годится - то, как возможное решение - записывать все контакты в специальную таблицу. С наборами данных получится просто. Удаляете все, пишите всю почту, добавляя записи. Таблицу на первую запись, редактируете ее, записывая скайпы, если таблица кончилась, добавляете в нее записи, записывая только скайпы. Таблицу на первую запись, редактируете ее, записывая телефоны, ... .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.08.2013, 00:32
Помогаю со студенческими работами здесь

Объединение нескольких разных таблиц в одну
Добрый день! Помогите пожалуйста с таблицей. Имеется несколько таблиц с разным кол-вом столбцов. Все они связаны с одной таблицей. ...

Объединение данных из нескольких таблиц в одну
Здравствуйте уважаемые участники форума. Прошу помочь советом, как решить такую задачку. Имеется несколько таблиц, они схожи по...

Объединение нескольких связанных импортированных таблиц в 1 запрос
Требуется Ваша помощь, друзья!) У меня есть 15 таблиц по 15ти отделам, с одинаковыми шапками. Мне необходимо объединить их в одну, но...

INNER JOIN используется только для того чтобы вытащить значение с одной из таблиц
Наткнулся в проекте на запрос следующего вида: SELECT t1.firstColumn, t1.secondColumn, t1.thirdColumn, t1.fourthColumn, t1.fifthcolumn ...

Объединение таблиц INNER JOIN.
Помогите объединить три таблицы связанных по id с помощью INNER JOIN. Две таблицы у меня получается объединить. procedure...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru