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

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

15.11.2015, 16:08. Просмотров 760. Ответов 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
Ответы с готовыми решениями:

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

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
7819 / 3032 / 434
Регистрация: 07.08.2010
Сообщений: 8,255
Записей в блоге: 2
16.11.2015, 10:30 22
инфу нельзя выложить --понятно
но почему бы не выложить хотя бы текст запроса

----
текст многое покажет
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 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-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 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
22935 / 13006 / 2694
Регистрация: 28.04.2012
Сообщений: 14,238
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-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 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
22935 / 13006 / 2694
Регистрация: 28.04.2012
Сообщений: 14,238
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,...


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

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

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