Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Kiriver
347 / 172 / 65
Регистрация: 09.04.2018
Сообщений: 766
1

Пустые строки в запросе

22.03.2019, 13:27. Просмотров 966. Ответов 7
Метки нет (Все метки)

Добрый день!

есть запрос

SQL
1
2
3
SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, Работы.Причина, 
Организации.Название, Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, Работы.Код_Оборудование_Работы, Сотрудники.ФИО, Работы.Печать
FROM ТипРегламентРабот INNER JOIN (Сотрудники INNER JOIN (Организации INNER JOIN Работы ON Организации.КодОрганизации = Работы.Код_Организации_Работы) ON Сотрудники.КодСотруднка = Работы.ПроводилРаботы) ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы;

Он создан на основе таблицы Работа. В ней есть два взаимоисключающих поля Организация и ФИО, т.е. работу проводит либо приглашенная организация, либо сотрудники своими силами.

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

Добавлено через 45 секунд
саму БД не даёт форму вставить ругается на то, что такой файл уже выкладывали
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2019, 13:27
Ответы с готовыми решениями:

Вывести в запросе пустые строки
Здравствуйте. В базе две таблицы. Мне нужно сделать запрос, который бы выводил кол-во водителей...

Вывод в запросе пустые строки
Помогите,пожалуйста! Есть таблицы: Пациент, Диагноз, Медикаментозное лечение, Процедурное лечение....

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

Как в sql запросе не выводить пустые строки?
Народ привет! Как в sql запросе не выводить пустые строки? Спасибо!

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

7
Kiriver
347 / 172 / 65
Регистрация: 09.04.2018
Сообщений: 766
22.03.2019, 13:30  [ТС] 2
а, вот...
0
Вложения
Тип файла: zip Database13.zip (354.6 Кб, 2 просмотров)
Capi
Модератор
Эксперт MS Access
2242 / 1182 / 276
Регистрация: 12.06.2016
Сообщений: 2,860
22.03.2019, 13:39 3
Цитата Сообщение от Kiriver Посмотреть сообщение
Иннер Джойн этого не допускает
Но ведь есть еще и LEFT JOIN, и RIGHT JOIN.
0
Kiriver
347 / 172 / 65
Регистрация: 09.04.2018
Сообщений: 766
22.03.2019, 13:49  [ТС] 4
Capi, пробовал, не выполняется вообще. правда может я не там менял. Я менял в первом случае после Фром.

Добавлено через 8 минут
Замена всех Иннер на Райт Джойн помогло
0
22.03.2019, 13:49
mobile
Эксперт MS Access
24629 / 13437 / 2853
Регистрация: 28.04.2012
Сообщений: 14,734
22.03.2019, 13:59 5
Лучший ответ Сообщение было отмечено Kiriver как решение

Решение

Kiriver, вот такой вариант с юнионом. Посмотрите на 2 правых поля: Кто и Название
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, Работы.Причина, 
Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, Работы.Код_Оборудование_Работы, 
Работы.Печать, "Организации" AS Кто, Организации.Название 
FROM ТипРегламентРабот INNER JOIN (Организации INNER JOIN Работы 
ON Организации.КодОрганизации = Работы.Код_Организации_Работы) 
ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы;
 
UNION ALL
 
SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, Работы.Причина, 
Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, Работы.Код_Оборудование_Работы, 
Работы.Печать, "Сотрудники" AS Кто, Сотрудники.ФИО
FROM ТипРегламентРабот INNER JOIN (Сотрудники INNER JOIN Работы 
ON Сотрудники.КодСотруднка = Работы.ПроводилРаботы) 
ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы;
1
Kiriver
347 / 172 / 65
Регистрация: 09.04.2018
Сообщений: 766
22.03.2019, 14:26  [ТС] 6
mobile, спасибо. Вы прям в десятку попали с таким вариантом, т.к. те два поля у меня - это своеобразные костыли, которые я придумал, хотя в шаблоне должно быть одно поле.

Добавлено через 16 минут
mobile, подскажите еще, пожалуйста! Пытаюсь всю конструкцию перенести в модуль, переношу так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Set sq1 = CurrentDb.OpenRecordset("SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, " & _
          "Работы.Причина, Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, " & _
          "Работы.Код_Оборудование_Работы, Работы.Печать, Организации.название AS Кто, Организации.Название " & _
          "FROM ТипРегламентРабот INNER JOIN (Организации INNER JOIN Работы " & _
          "ON Организации.КодОрганизации = Работы.Код_Организации_Работы) " & _
          "ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы " & _
          "where Работы.Печать = True and код_оборудование_Работы = " & Forms!оборудование!КодОборудование & _
          "UNION ALL " & _
          "SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, Работы.Причина, " & _
          "Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, Работы.Код_Оборудование_Работы, " & _
          "Работы.Печать, сотрудники.фио AS Кто, Сотрудники.ФИО " & _
          "FROM ТипРегламентРабот INNER JOIN (Сотрудники INNER JOIN Работы" & _
          "ON Сотрудники.КодСотруднка = Работы.ПроводилРаботы)" & _
          "ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы;" & _
          "where Работы.Печать = True and код_оборудование_Работы = " & Forms!оборудование!КодОборудование, dbOpenDynaset)
Ругается на неправильный синтаксис. При показе ошибки явно не хватает пробела перед Юнион, не могу понять как его поставить. Хотя может и в принципе неправильно прописываю.
0
mobile
Эксперт MS Access
24629 / 13437 / 2853
Регистрация: 28.04.2012
Сообщений: 14,734
22.03.2019, 14:42 7
Пробуйте
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Dim sql As DAO.Recordset, s As String
    s = "SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, " & _
          "Работы.Причина, Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, " & _
          "Работы.Код_Оборудование_Работы, Работы.Печать, Организации.название AS Кто, Организации.Название " & _
          "FROM ТипРегламентРабот INNER JOIN (Организации INNER JOIN Работы " & _
          "ON Организации.КодОрганизации = Работы.Код_Организации_Работы) " & _
          "ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы " & _
          " where Работы.Печать = True and код_оборудование_Работы = " & Forms!оборудование!КодОборудование & _
          " UNION ALL " & _
          "SELECT Работы.ДатаПроведенияРабот, ТипРегламентРабот.НаименованиеРегРабот, Работы.Причина, " & _
          "Работы.ДатаВводаЭксплуатации, Работы.РазрешилВВод, Работы.РаботыПримечания, Работы.Код_Оборудование_Работы, " & _
          "Работы.Печать, сотрудники.фио AS Кто, Сотрудники.ФИО " & _
          "FROM ТипРегламентРабот INNER JOIN (Сотрудники INNER JOIN Работы " & _
          "ON Сотрудники.КодСотруднка = Работы.ПроводилРаботы)" & _
          "ON ТипРегламентРабот.КодТипРешламентРабот = Работы.Код_ТИпРаботы " & _
          "where Работы.Печать = True and код_оборудование_Работы = " & Forms!оборудование!КодОборудование
     Set sql = CurrentDb.OpenRecordset(s)
Было несколько небольших ошибок, в том числе отсутствие пробелов, наличие точки с запятой внутри текста SQL (в запросах юнион конструктор допускает, а DAO нет).
Кроме того для удобной отладки вынес строку скл в отдельную переменную. Так удобнее отлаживать длинные тексты. Можно их кинуть в конструктор акса и там отлаживать.
1
Kiriver
347 / 172 / 65
Регистрация: 09.04.2018
Сообщений: 766
22.03.2019, 14:46  [ТС] 8
mobile, спасибо, всё заработало.
0
22.03.2019, 14:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2019, 14:46

Не выводить пустые столбцы в запросе
Здравствуйте, прошу помочь: как программно не выводить пустые столбцы (поля) в запросе. У меня их...

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

Заполнить пустые поля нулями в перекрестном запросе
Здравствуйте! Подскажите, пожалуйста, как заполнить пустые ячейки, появляющиеся в результате...


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

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

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