Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
 
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
#1

Создать запрос по двум таблицам по полю, чтобы отображались данные по всем контрактам - MS Access

15.11.2015, 16:08. Просмотров 743. Ответов 30
Метки нет (Все метки)

Имеем 2 таблицы, главную и подчиненную ( 1 - ко многим ).
При создании запроса в таблице База_Контракты по полю k_Fir, отображаются только те контракты, которые имеют хотя бы одну запись в База_Счет, не имеющие такой записи - не отображаются.
Как правильно создать запрос по двум таблицам по полю k_Fir, чтобы отображались данные по ВСЕМ контрактам (k_ID), в не зависимости имеют они связанные записи в таблице База_Счет или нет.
Спасибо.
0
Миниатюры
Создать запрос по двум таблицам по полю, чтобы отображались данные по всем контрактам  
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.11.2015, 16:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Создать запрос по двум таблицам по полю, чтобы отображались данные по всем контрактам (MS Access):

Необходимо создать запрос по двум таблицам
Здравствуйте! Необходимо создать запрос по двум таблицам. КЛИЕНТ (Код_клиента,...

SQL-запрос к двум таблицам
Коллеги, подскажите как правильно написать запрос к БД Access, чтобы из двух...

SQL-запрос к двум таблицам используя GROUP BY
Здравствуйте! Имеются две таблицы: Groups (Group_ID, Group)...

Как сделать такой запрос?чтобы отображались все периоды ,начислено
Добрый день, Прошу помочь новичку в таком вопросе(файл базы прилагаю) ...

Как создать подчиненную таблицу в форме чтобы отображались вложения?
Сделал базу и начал формировать формы по людям и технике, но когда пытаюсь...

Нужно чтобы в форме данные одной записи отображались друг под другом (в один столбец)
Здравствуйте подскажите, как можно сделать подобную вещь: --нужно чтобы в...

30
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
16.11.2015, 10:23  [ТС] #21
Цитата Сообщение от Вячеслав Я Посмотреть сообщение
все таки найдите возможность выложить файл с базой.
Видимо, придётся идти двумя путями: как посоветовал PuhKMV, не трогать солнце на востоке и копировать тот отчет, что случайно удачно настроился и параллельно убрать лишнее из базы, чтобы можно было выложить.
Спасибо.
0
shanemac51
Модератор
Эксперт MS Access
7768 / 2986 / 423
Регистрация: 07.08.2010
Сообщений: 8,142
Записей в блоге: 1
16.11.2015, 10:30 #22
инфу нельзя выложить --понятно
но почему бы не выложить хотя бы текст запроса

----
текст многое покажет
0
texnik-san
шапоклякистка 8-го дня
3629 / 2190 / 389
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
16.11.2015, 10:47 #23
Цитата Сообщение от shanemac51 Посмотреть сообщение
но почему бы не выложить хотя бы текст запроса
Думается, он просто не умеет.
0
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
16.11.2015, 10:59  [ТС] #24
Ну зачем Вы так, дамы... Неопытный пользователь, ещё не значит полный профан...
Но я кажется понял, почему выскакивает ошибка и как удалось случайно её избежать.
Позже сделаю скрины, потому что проблема всё-таки не решена.
0
Вложения
Тип файла: txt Запрос.txt (617 байт, 3 просмотров)
texnik-san
шапоклякистка 8-го дня
3629 / 2190 / 389
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
16.11.2015, 11:18 #25
Чудо ))

Oracle 11 SQL
1
2
3
4
5
6
7
8
SELECT База_Контракты.k_ID, База_Контракты.k_Fir, База_Контракты.k_data, База_Контракты.k_Nomer,
  База_Контракты.k_Summa, База_Контракты.k_Tov, База_Контракты.k_Pok, База_Контракты.k_pok_kod, 
  База_Счет.ts_ID, База_Счет.ts_k_id, База_Счет.ts_Data, База_Счет.ts_Pri_sum, База_Счет.ts_Ras_sum, 
  База_Счет.ts_Dok, База_Счет.ts_Kto, База_Счет.ts_Kto_kod, База_Счет.ts_Nazn, База_Счет.ts_Gorod, 
  База_Счет.ts_Wid_oper_kod
FROM База_Контракты LEFT JOIN База_Счет ON База_Контракты.[k_ID] = База_Счет.[ts_k_id]
WHERE (((База_Контракты.k_pok_kod)=45))
ORDER BY База_Контракты.k_data, База_Контракты.k_Nomer, База_Счет.ts_Data;
Добавлено через 3 минуты
я имею в виду, текст SQL можно писать прямо в тексте сообщения, выделяя тегами - так гораздо удобнее читать.

Все, что вам нужно на будущее - создавать запрос как есть, переходить в режим SQL и менять слова INNER JOIN на LEFT JOIN (или RIGHT JOIN - смотря в каком порядке идут таблицы).
1
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
16.11.2015, 11:49  [ТС] #26
Следующая серия
На самом деле в итоговой версии запроса участвуют три таблицы: две связанные (1-ко многим) - с данными и одна не связанная - настроечная (База_Отчеты). Это таблица с единственной записью, куда сохраняются параметры для отчета, которые потом используются в запросах (пример: см. на скрине условия отбора по полю k_data). Таких параметров (полей) там более десятка.
В процессе экспериментов, в духе "Научного тыка", пытаясь изменить условия объединения таблиц я использовал черновую копию запроса в которой настроечной таблицы (База_Отчетов) не было. Обычно она добавляется на последнем этапе настройки запроса.
Таким образом, без настроечной не связанной таблицы устанавливается п.2 параметров объединения таблиц, ошибка не выскакивает, отчет формируется правильно. После добавления этой таблицы - выскакивает выше указанная ошибка (сообщение #3).
Как-то так Что посоветуете?
0
Миниатюры
Создать запрос по двум таблицам по полю, чтобы отображались данные по всем контрактам  
Вложения
Тип файла: txt Запрос_01.txt (867 байт, 2 просмотров)
mobile
Эксперт MS Access
22496 / 12814 / 2613
Регистрация: 28.04.2012
Сообщений: 14,015
16.11.2015, 12:10 #27
Лучший ответ Сообщение было отмечено lcp как решение

Решение

Таблицы База_Контракты и База_Отчеты надо объединить в один подзапрос. Это и сообщалось аксом.

KO алиас (псевдоним) подзапроса
SQL
1
2
3
4
5
6
7
8
SELECT KO.k_ID, KO.k_Fir, KO.k_data, KO.k_Nomer, KO.k_Summa, KO.k_Tov, KO.k_Pok, KO.k_pok_kod, 
  База_Счет.ts_ID, База_Счет.ts_k_id, База_Счет.ts_Data, База_Счет.ts_Pri_sum, База_Счет.ts_Ras_sum, 
  База_Счет.ts_Dok, База_Счет.ts_Kto, База_Счет.ts_Kto_kod, База_Счет.ts_Nazn, База_Счет.ts_Gorod, 
  База_Счет.ts_Wid_oper_kod, KO.poData01, KO.poData02
FROM (SELECT * FROM База_Контракты, База_Отчеты WHERE k_data BETWEEN [poData01] AND [poData02]) AS KO 
  LEFT JOIN База_Счет ON KO.[k_ID] = База_Счет.[ts_k_id]
WHERE (KO.k_Fir=IIf(KO![poFir]=3,[k_Fir],IIf(KO![poFir]=1,1,2))) AND (KO.k_pok_kod=45)
ORDER BY KO.k_data, KO.k_Nomer, База_Счет.ts_Data
1
texnik-san
шапоклякистка 8-го дня
3629 / 2190 / 389
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
16.11.2015, 12:28 #28
Цитата Сообщение от lcp Посмотреть сообщение
На самом деле в итоговой версии запроса участвуют три таблицы


А начать с этого нельзя было?
1
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
16.11.2015, 12:49  [ТС] #29
Цитата Сообщение от mobile Посмотреть сообщение
Таблицы База_Контракты и База_Отчеты надо объединить в один подзапрос. Это и сообщалось аксом.
Вот это уже высший пилотаж
Даже не сразу понял, что после этого произошло в конструкторе запросов...
Но ведь работает! mobile, спасибо большое!
А где можно почитать на русском про объединение таблиц в один подзапрос?
0
lcp
4 / 4 / 0
Регистрация: 17.10.2015
Сообщений: 61
03.12.2015, 23:25  [ТС] #30
Цитата Сообщение от mobile Посмотреть сообщение
Таблицы База_Контракты и База_Отчеты надо объединить в один подзапрос. Это и сообщалось аксом.
KO алиас (псевдоним) подзапроса
Уважаемые, форумчане.
Подскажите, как это объединить в один ПОДЗАПРОС в Конструкторе запросов? Или это нужно "ручками" прописывать в SQL?
Спасибо.
0
mobile
Эксперт MS Access
22496 / 12814 / 2613
Регистрация: 28.04.2012
Сообщений: 14,015
03.12.2015, 23:42 #31
Наиболее просто это сделать сохраненный запрос и использовать его в основном. Сохраните выражение подзапроса под именем, ну пусть опять КО
SQL
1
SELECT * FROM База_Контракты, База_Отчеты WHERE k_data BETWEEN [poData01] AND [poData02]
А в основном запросе в конструкторе выбираете запрос КО и таблицу База_Счет, связываете их и набираете нужные поля. В результате SQL-выражение основного запроса приобретет вид без подзапроса. Его роль будет играть сохраненный запрос КО
SQL
1
2
3
4
5
6
7
SELECT КО.k_ID, КО.k_Fir, КО.k_data, КО.k_Nomer, КО.k_Summa, КО.k_Tov, КО.k_Pok, КО.k_pok_kod, 
  База_Счет.ts_ID, База_Счет.ts_k_id, База_Счет.ts_Data, База_Счет.ts_Pri_sum, База_Счет.ts_Ras_sum, 
  База_Счет.ts_Dok, База_Счет.ts_Kto, База_Счет.ts_Kto_kod, База_Счет.ts_Nazn, База_Счет.ts_Gorod, 
  База_Счет.ts_Wid_oper_kod, КО.poData01, KO.poData02
FROM КО LEFT JOIN База_Счет ON КО.[k_ID] = База_Счет.[ts_k_id]
WHERE (КО.k_Fir=IIf(КО![poFir]=3,[k_Fir],IIf(КО![poFir]=1,1,2))) AND (КО.k_pok_kod=45)
ORDER BY КО.k_data, КО.k_Nomer, База_Счет.ts_Data
1
03.12.2015, 23:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2015, 23:42
Привет! Вот еще темы с решениями:

Получить данные из бд форума, запрос к двум таблицам
Доброго дня. Есть бд от старого форума, и нужно просто вытащить данные тема -...

Запрос к двум таблицам
Помогите исправить запрос: SELECT Sotrudnik.id_sotr, Sotrudnik.familia,...

Запрос к двум таблицам
Такая проблемка, есть 2 таблицы: t1: c столбцами id,n2,n3,n4,n5 t2: c ...

Запрос по двум таблицам
Здравствуйте, помогите пожалуйста составить запрос по двум таблицам, у них...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru