Перейти к содержимому

Как создать сложный запрос в access

  • автор:

4.13 Основы разработки запросов

Одним из основных инструментов обработки данных в СУБД Access являются запросы. В Access имеется удобное для пользователя средство формирования запроса по образцу, с помощью которого легко может быть построен сложный запрос.

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

В Access может быть создано несколько видов запроса:
* Запрос на выборку;
* Запрос на создание таблицы;
* Запросы на обновление, добавление, удаление.

Запрос на выборку играет особую роль, так как на его основе строятся запросы другого вида. Запрос на выборку позволяет выбирать данные из одной или нескольких взаимосвязанных таблиц. Результаты выполнения запроса отображаются в виде временной таблицы. Окно запроса в режиме таблицы аналогично окну таблицы БД.

Разработка запроса производится в режиме Конструктор запросов. Для создания запроса надо в окне БД выбрать вкладку Запрос и нажать кнопку Создать. В открывшемся окне Новый запрос выбрать Конструктор. В окне Добавление таблицы нужно выбрать таблицы данные из которых используются в запросе и нажать кнопку Добавить. Затем кнопкой Закрыть выйти из окна Добавление таблицы.

В результате появится окно Конструктора запросов : запрос на выборку. Окно Конструктора разделено на две панели. Верхняя панель содержит выбранные таблицы со списками полей. Нижняя панель является бланком запроса по образцу, который надо заполнить.

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

При заполнении бланка запроса необходимо:
* В строку Поле включить имена полей, используемых в запросе;
* В строке Вывод на экран отметить поля, которые должны быть включены в результирующую таблицу;
* В строке Условия отбора задать условия отбора записей;
* В строке Сортировка выбрать порядок сортировки записей в результирующей таблице.

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

* В первой строке бланка запроса Поле щелчком мыши вызвать кнопку списка и, нажав ее, выбрать из списка нужное поле;
* Перетащить нужное поле из списка полей таблицы в строку Поле бланка запроса.

В списке полей каждой таблицы на первом месте стоит символ «*», который означает все поля таблицы. Этот пункт выбирается, если в запрос включаются все поля таблицы.

Конструирование запроса на создание таблицы

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

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

Конструирование запроса на обновление

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

В бланке запроса на обновление в строке Обновление нужно ввести имя поля из обновляемой таблицы в квадратных скобках.

В запросах на обновление можно использовать вычисляемые выражения. Для этого в строке Обновление бланка запроса нужно ввести выражение в виде [поле1] знак действия [поле2].

Конструирование перекрестных запросов

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

Разновидностью перекрестного запроса является запрос на основе другого запроса. Для этого используются данные из ранее созданного запроса на равном основании с данными из таблиц.

Создание запроса на основе нескольких таблиц

В простейшем случае построение и использование запроса в Access заключается в выборе требуемых полей из таблицы, применении условий (если они нужны) и просмотре результатов запроса. Но чаще необходимо использовать данные, которые находятся в разных таблицах. К счастью, вы можете создавать запросы, объединяющие сведения из нескольких источников. В этой статье объясняется, когда следует получать данные сразу из нескольких таблиц и как это делать.

Выберите нужное действие

  • Уточнение данных в запросе с помощью данных из связанной таблицы
  • Объединение данных в двух таблицах с помощью их связей с третьей таблицей
  • Просмотр всех записей из двух похожих таблиц

Уточнение данных в запросе с помощью данных из связанной таблицы

В некоторых случаях запрос, построенный на основе одной таблицы и предоставляющий необходимые сведения, может стать более информативным и полезным благодаря данным из другой таблицы. Например, предположим, что у вас есть список кодов сотрудников, которые выводятся в результатах запроса. Вы понимаете, что было бы более удобнее, если бы в этом списке были видны и имена сотрудников, но они находятся в другой таблице. Чтобы в результатах запроса отображались имена сотрудников, следует включить в него обе таблицы.

Использование мастера запросов для построения запроса на основе главной и связанной таблицы

  1. Убедитесь, что для таблиц задано отношение в окно отношений. Инструкции
    1. На вкладке Работа с базами данных в группе Показать или скрыть выберите пункт Отношения.
    2. На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
    3. Выберите таблицы, которые нужно связать.
      • Если таблицы отображаются в окне схемы данных, убедитесь, что отношение между ними уже установлено. Отношение отображается в виде линии, соединяющей общие поля двух таблиц. Чтобы узнать, какие поля таблиц связаны отношением, дважды щелкните линию связи.
      • Если таблицы не отображаются в окне схемы данных, следует добавить их. На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Имена таблиц. Дважды щелкните каждую из таблиц, которые вы хотите отобразить, а затем нажмите кнопку Закрыть.
    4. Если между таблицами не установлено отношение, создайте его, перетащив поле из одной таблицы на поле другой. Поля, по которым создается отношение, должны иметь одинаковый тип данных.

    Примечание: Создать отношение между полем с типом Тип данных «Счетчик» и полем, имеющим тип данных Числовой тип данных, можно в том случае, если это поле имеет размер «длинное целое». Это часто бывает так при создании отношение «один-ко-многим».

    Пример на основе базы данных «Борей»

    В приведенном ниже примере используется мастер запросов, с помощью которого строится запрос, отображающий список заказов, стоимость доставки каждого заказа и фамилию сотрудника, выполнившего заказ.

    Примечание: Этот пример подразумевает изменение учебной базы данных «Борей». Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.

    Построение запроса с помощью мастера запросов
    1. Откройте учебную базу данных «Борей». Закройте форму входа.
    2. На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.
    3. В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.
    4. В поле со списком Таблицы и запросы выберите пункт Таблица: Заказы.
    5. В списке Доступные поля дважды щелкните пункт ИД_заказа, чтобы переместить это поле в список Выбранные поля. Дважды щелкните пункт Цена доставки, чтобы переместить это поле в список Выбранные поля.
    6. В поле со списком Таблицы и запросы выберите пункт Таблица: Сотрудники.
    7. В списке Доступные поля дважды щелкните пункт Имя, чтобы переместить это поле в список Выбранные поля. Дважды щелкните пункт Фамилия, чтобы переместить это поле в список Выбранные поля. Нажмите кнопку Далее.
    8. Так как вы создаете список всех заказов, следует использовать подробный запрос. Если нужно суммировать стоимость доставки заказов, выполненных сотрудником, или применить другую агрегатную функцию, следует использовать итоговый запрос. Выберите вариант Подробный (вывод каждого поля каждой записи) и нажмите кнопку Далее.
    9. Нажмите кнопку Готово для просмотра результатов.

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

    Объединение данных в двух таблицах с помощью их связей с третьей таблицей

    Часто данные в двух таблицах связаны друг с другом через третью таблицу. Это может быть в том случае, когда данные в первых двух таблицах связаны отношение «многие-ко-многим». Хорошим приемом при проектировании баз данных является разбиение одной связи с отношением «многие-ко-многим» между двумя таблицами на две связи с отношением «один-ко-многим», в которых участвуют три таблицы. Это делается путем создания третьей (связующей) таблицы, в которой есть первичный ключ и внешний ключ для каждой из таблиц. Затем создается связь «один-ко-многим» между каждым внешним ключом связующей таблицы и соответствующим первичным ключом связуемой таблицы. В таких случаях следует включать в запрос все три таблицы, даже если вы хотите получить данные только из двух.

    Создание запроса на выборку с использованием таблиц, связанных отношением «многие-ко-многим»

    1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
    2. Дважды щелкните две таблицы, содержащие данные, которые вы хотите включить в запрос, а также связуемую таблицу, а затем нажмите кнопку «Закрыть». Все три таблицы появятся в рабочей области конструктора запросов, связанные по соответствующим полям.
    3. Дважды щелкните поля, которые вы хотите использовать в запросе. Каждое поле появится в бланк запроса.
    4. В бланке запроса укажите условия для полей в строке Условия отбора. Чтобы поле, по которому задаются условия, не отображалось в результатах запроса, снимите флажок в строке Показать для него.
    5. Чтобы отсортировать результаты по значениям поля, в бланке запроса в строке Сортировка для него выберите значение По возрастанию или По убыванию (в зависимости от того, в каком направлении вы хотите выполнить сортировку записей).
    6. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить. Access выведет результаты запроса в Режим таблицы.

    Пример на основе базы данных «Борей»

    Примечание: Этот пример подразумевает изменение учебной базы данных «Борей». Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.

    Предположим, что у вас появилась новая возможность: поставщик из Рио-де-Жанейро нашел ваш веб-сайт и хочет с вами сотрудничать. Однако он работает только в Рио-де-Жанейро и Сан-Паулу. Компания поставляет все интересующие вас категории пищевых продуктов. Являясь довольно крупным предприятием, поставщик хочет, чтобы вы гарантировали достаточно большой рынок сбыта, который обеспечил бы ему годовые продажи объемом не менее 20 000 бразильских реалов (около 9 300 долларов США). Можете ли вы обеспечить требуемый рынок сбыта?

    Данные, необходимые для ответа на этот вопрос, находятся в двух местах: в таблице «Клиенты» и в таблице «Сведения о заказе». Эти таблицы связаны друг с другом через таблицу «Заказы». Отношения между этими таблицами уже заданы. В таблице «Заказы» для каждого заказа может быть указан только один клиент, связанный с таблицей «Клиенты» по полю «ИДКлиента». Каждая запись в таблице «Сведения о заказе» связана только с одним заказом в таблице «Заказы» по полю «ИД_заказа». Таким образом, у каждого клиента может быть множество заказов, для каждого из которых есть несколько записей со сведениями.

    В данном примере следует построить перекрестный запрос, в котором будут отображены годовые продажи в городах Рио-де-Жанейро и Сан-Паулу.

    Открытие запроса в Конструкторе

    1. Откройте базу данных «Борей». Закройте форму входа.
    2. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
    3. Дважды щелкните «Клиенты»,«Заказы»и выберите«Сведения о заказе». Все три таблицы появятся в рабочей области конструктора запросов.
    4. В таблице «Клиенты» дважды щелкните поле «Город», чтобы добавить его в бланк запроса.
    5. В бланке запроса в строке Условие отбора столбца Город введите In («Рио-де-Жанейро»,»Сан Паулу). Это позволяет включить в запрос только записи о заказах клиентов из этих городов.
    6. В таблице «Сведения о заказе» дважды щелкните поля «ДатаИсполнения» и «Цена». Поля добавляются в бланк запроса.
    7. В столбце бланка запроса ДатаИсполнения выберите строку Поле. Замените [ДатаИсполнения] на Год: Format([ДатаИсполнения],»yyyy»). При этом будет создан псевдоним поля (Год), позволяющий использовать только значение года из даты, указанной в поле «ДатаИсполнения».
    8. В столбце бланка запроса Цена выберите строку Поле. Замените [Цена] на Продажи: [Сведения о заказе].[Цена]*[Количество]-[Сведения о заказе].[Цена]*[Количество]*[Скидка]. При этом будет создан псевдоним поля (Продажи), вычисляющий сумму продаж для каждой записи.
    9. На вкладке Конструктор в группе Тип запроса щелкните элемент Перекрестная таблица. В бланке запроса появятся две новые строки: Итоги и Перекрестная таблица.
    10. В столбце бланка запроса Город щелкните строку Перекрестная таблица, а затем щелкните Заголовки строк. Названия городов будут использоваться в качестве заголовков строк (т. е. запрос будет возвращать одну строку для каждого города).
    11. В столбце Год щелкните строку Перекрестная таблица, а затем щелкните Заголовки столбцов. Значения годов будут использоваться в качестве заголовков столбцов (т. е. запрос будет возвращать один столбец для каждого года).
    12. В столбце Продажи щелкните строку Перекрестная таблица, а затем щелкните элемент Значение. Значения продаж будут отображаться на пересечениях строк и столбцов (т. е. запрос будет возвращать одно значение продаж для каждого сочетания города и года).
    13. В столбце Продажи щелкните строку Итоги, а затем щелкните элемент Sum. Запрос будет суммировать все значения столбца. В строке Итоги для других двух столбцов можно оставить значение по умолчанию Группировка, так как в этих столбцах требуется отобразить отдельные значения, а не агрегированные показатели.
    14. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.

    Теперь у вас есть запрос, возвращающий общие годовые продажи по Рио-де-Жанейро и Сан-Паулу.

    Просмотр всех записей из двух похожих таблиц

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

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

    Вы можете импортировать данные другой школы в новые таблицы в своей базе данных, но в этом случае изменения, внесенные в базу данных другой школы, не будут отражаться в вашей базе данных. Лучшим решением было бы установить связь с таблицами другой школы, а затем создать запросы, объединяющие эти данные во время выполнения. При этом вы сможете анализировать данные в едином наборе вместо того, чтобы выполнять два отдельных анализа, а затем пытаться объединить их в один.

    Чтобы просмотреть все записи из двух таблиц с одинаковой структурой, используйте запрос на объединение.

    Запросы на объединение невозможно отобразить в Конструкторе. Они создаются с помощью команд SQL, которые нужно вводить на вкладке объекта в режим SQL.

    Создание запроса на объединение двух таблиц

    1. На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
    2. На вкладке Конструктор в группе Тип запроса нажмите кнопку Объединение. Запрос переключится из Конструктора в режим SQL. На данном этапе вкладка объекта в режиме SQL будет пуста.
    3. В режиме SQL введите SELECT и список полей первой таблицы, которые вы хотите включить в запрос. Имена полей должны быть заключены в квадратные скобки и разделены запятыми. Когда вы закончите вводить имена полей, нажмите клавишу ВВОД. Курсор переместится на одну строку вниз в окне режима SQL.
    4. Введите FROM и имя первой таблицы, включаемой в запрос. Нажмите клавишу ВВОД.
    5. Если вы хотите указать условие для поля первой таблицы, введите WHERE, имя поля, оператор сравнения (обычно знак равенства =) и условие. Можно добавлять дополнительные условия к концу предложения WHERE, используя ключевое слово AND и такой же синтаксис, как и для первого условия (например, WHERE [Уровень]=»100″ AND [Часов]>2). После завершения ввода условий нажмите клавишу ВВОД.
    6. Введите слово UNION и нажмите клавишу ВВОД.
    7. Введите SELECT и список полей второй таблицы, которые вы хотите включить в запрос. Следует указать те же поля, что для первой таблицы, и в том же порядке. Имена полей должны быть заключены в квадратные скобки и разделены запятыми. Когда вы закончите вводить имена полей, нажмите клавишу ВВОД.
    8. Введите FROM и имя второй таблицы, включаемой в запрос. Нажмите клавишу ВВОД.
    9. Если вы хотите, добавьте предложение WHERE, как описано в шаге 6.
    10. Введите точку с запятой (;), чтобы обозначить конец запроса.
    11. На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить. Результаты будут отображены в режиме таблицы.

    MS Access: создание сложных запросов с помощью конструктора запросов

    Тип урока: комбинированный (изучение нового и закрепление ране изученного материала).

    Сегодня у нас необычный урок. Сегодня присутствуют гости, посмотрите на них. На гостей больше, пожалуйста, не отвлекайтесь, они на нас посмотрят сами.

    Постановка цели урока.

    Сегодня тема нашего урока: «Создание сложных запросов с помощью конструктора». На этом занятии мы вспомним основные приемы работы с объектами БД и научимся создавать с помощью конструктора запросы с параметром.

    Актуализация опорных знаний (тест).

    Для начала мы вспомним основные сведения о БД и ответим на вопросы теста (выполнение тестового задания, затем взаимоконтроль).

    • набор сведений, относящихся к определенной теме или задаче, предназначенных для временного хранения;
    • программное обеспечение для работы с информацией;
    • организованная совокупность сведений о конкретных объектах реального мира в какой-либо предметной области, предназначенная для длительного хранения и постоянного применения;
    • поиск и изменение информации об объектах реального мира.
    • в виде таблиц;
    • на множестве компьютеров сети;
    • друг с другом в отношении вложенности и подчиненности;
    • в памяти нескольких вычислительных машин
    • Основными объектами СУБД MS Access являются:
    • таблицы, запросы, отчеты, бланки;
    • таблицы, запросы;
    • таблицы, вопросы, закладки, формы;
    • таблицы, запросы, отчеты, формы;
    • объект БД, предназначенный для хранения бланков;
    • объект БД, предназначенный для ввода данных;
    • объект БД, предназначенный для хранения данных в виде записей и полей;
    • запросы, отчеты, бланки
    • линейки и карандаша;
    • мастера и конструктора;
    • мастера, конструктора и путем ввода данных.
    • путем ввода данных;
    • объект БД, предназначенный для хранения данных;
    • объект БД, позволяющий получить нужные данные из одной или нескольких таблиц;
    • объект БД, предназначенный для вывода данных;
    • объект БД, предназначенный для ввода данных.
    • объект БД, предназначенный для ввода данных
    • объект БД, предназначенный для расчета данных
    • объект БД, предназначенный для печати данных;
    • объект БД, предназначенный для хранения данных.
    • объект БД, предназначенный для печати данных;
    • объект БД, позволяющий получить нужные данные;
    • объект БД, предназначенный для хранения данных;
    • объект БД, предназначенный для ввода данных.

    Объяснение нового материала.

    Для изменения уже существующих запросов и для создания новых запросов используется Конструктор запросов. Для того чтобы открыть запрос в режиме Конструктора, выделите в списке один из существующих запросов, например, только что созданный запрос «:», и нажмите кнопку Конструктор на панели инструментов окна База данных.

    Появляется окно Конструктора запросов. В верхней части окна отображается таблица (или несколько таблиц, если запрос многотабличный) в том виде, в каком таблицы отображаются в окне Схема данных. Таблицы — источники данных для запроса, являются базовыми таблицами запроса. В нижней части окна находится бланк запроса — таблица, ячейки которой используются для определения запроса. В бланке отображаются все столбцы, включенные в результирующее множество запроса.

    Окно конструктора разделено на две части. В верхней части находятся окна таблиц со списками полей. Имя каждой таблицы отображается в строке заголовка такого окна. В базе данных MS Access в различных режимах меняются и кнопки панели инструментов.

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

    Запрос на выборку позволяет отобрать необходимые поля с записями, которые могут быть отсортированы, либо отобраны по какому либо условию. Для использования условия используются знаки «=», «>», »

    Условие позволяет оперировать не только числовыми значениями, но и текстовыми элементами. Например: можно отобрать все поля, идентичные какому-либо слову, либо те слова, которые начинаются с определенной буквы.

    Для выбора различных видов запросов используется конструктор и в появившемся основном меню в пункте «Запрос» выбираем необходимый параметр запроса. Вид конструктора автоматически меняется, где появляются новые строки, куда и вносятся значения условий.

    • показ приемов работы по созданию запроса с параметром на примере БД «Агентства»
    • элементы окна режима Конструктор;
    • добавление таблиц;
    • заполнение полей запроса;
    • сортировка;
    • добавление, удаление и изменение параметров в запросе.
    • правила ТБ
    • объяснение задания
    • критерии оценивания-
    • правила сдачи итогов работы

    Задание (для учащихся):

    Создайте форму для ввода данных в таблицу «Европа».

    • название государства
    • столицу
    • название государства
    • площадь (в порядке убывания)
    • название государства
    • столица
    • плотность населения (более 7 чел)
    • название государства
    • столица
    • плотность населения (менее 7 чел)

    Задание (для учащихся):

    • название страны
    • название наивысшей точки и ее высоту
    • название страны
    • название столицы
    • язык арабский
    • название страны
    • денежная единица фунт стерлинг и алжирский динар
    • название страны
    • население (более 20 млн)
    • название наивысшей точки и ее высота (не менее 2000м)
    • название страны
    • крупные города с населением от 100 тыс
    • религия христианство
    • название страны (по алфавиту)
    • валюта
    • язык
    • экспорт
    • название страны (по алфавиту),
    • столица,
    • население столицы,
    • крупные города этой страны,
    • население крупного города.

    Подведение итогов урока.

    (проверка выполнения практической работы в парах, собеседование)

    На уроке поработали хорошо: :

    За работу на уроке выставлены оценки: :

    • не менее 3-х таблиц;
    • 3 запроса (на выборку, с параметром, перекрестный);
    • 3 отчета;
    • форма для ввода данных в таблицу.

    Сложный запрос на 3 таблицы в Access

    Есть три таблицы — Таблица1, Таблица2, Таблица3. Таблицы по структуре абсолютно одинаковые, скажем поля — номер_задачи(ключевое поле,совпадений нет), заказчик, задача. Таблица1 загружается каждый день из внешнего источника, в ней есть записи, которых нет в Таблица2, и в Таблице2 есть записи которых нет в Таблица1, Таблица2 — результат. Таблица1 есть отсутствующие записи в Таблица2 — новые задачи. В Таблица2 есть записи, которых нет в Таблица1 — решенные задачи. Требуется: в Таблица2 перенести решенные задачи в Таблица3 (добавить к существующим) и добавить новые из Таблица1 в Таблица2. «Если в Таблица2 нет записей из Таблица1, то добавляем их в Таблица2 и если в Таблица1 нет записей из Таблица2, то из Таблица2 переносим их в Таблица3»

    Отслеживать
    задан 8 сен 2017 в 9:40
    15 6 6 бронзовых знаков

    Вы хотите сделать это одним запросом? Тут логично делать два запроса insert into from select , сначала 2→3 и потом 1→2.

    8 сен 2017 в 10:01

    Я не могу понять как правильно оформить запрос именно, — «и если в Таблица1 нет записей из Таблица2, то из Таблица2 переносим их в Таблица3». Извините, просто в SQL совсем новичок.

    8 сен 2017 в 10:12

    На первую часть, если я правильно понял, то так: INSERT INTO Таблица2 SELECT Таблица1.* FROM Таблица1 LEFT JOIN Таблица2 ON Таблица1.номер_задачи = Таблица2.номер_задачи WHERE Таблица1.номер_задачи IS NULL

    8 сен 2017 в 10:14
    Не два запроса, а три. Ещё запрос на удаление из таблицы 2.
    8 сен 2017 в 10:15

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    INSERT INTO [Таблица3] ([Номер задачи], [Заказчик], [Задача]) SELECT [Таблица2].[Номер задачи], [Таблица2].[Заказчик], [Таблица2].[Задача] FROM [Таблица2] LEFT JOIN [Таблица1] ON [Таблица2].[Номер задачи] = [Таблица1].[Номер задачи] WHERE [Таблица1].[Номер задачи] IS NULL; DELETE [Таблица2].* FROM [Таблица2] WHERE [Таблица2].[Номер задачи] IN ( SELECT t2.[Номер задачи] FROM [Таблица2] AS t2 LEFT JOIN [Таблица1] ON t2.[Номер задачи] = [Таблица1].[Номер задачи] WHERE [Таблица1].[Номер задачи] IS NULL ); INSERT INTO [Таблица2] ([Номер задачи], [Заказчик], [Задача]) SELECT [Таблица1].[Номер задачи], [Таблица1].[Заказчик], [Таблица1].[Задача] FROM [Таблица1] LEFT JOIN [Таблица2] ON [Таблица2].[Номер задачи] = [Таблица1].[Номер задачи] WHERE [Таблица2].[Номер задачи] IS NULL; 

    PS. Предполагается, что в таблице 2 НЕТ записей, присутствующих в таблице 3. Иначе необходимо дополнительное ограничение в первом запросе.

    Отслеживать
    ответ дан 8 сен 2017 в 10:20
    31.4k 3 3 золотых знака 21 21 серебряный знак 40 40 бронзовых знаков

    Вроде бы я понял, но при попытке повторить ваш запрос в базе Access выдает мне ошибку, — «Обнаружены символы за пределами инструкции SQL».

    8 сен 2017 в 10:51

    @Евгений Это ТРИ запроса. РАЗНЫХ запроса. И Вы должны создать ТРИ запроса. И выполнять их СТРОГО в указанном порядке.

    8 сен 2017 в 11:54
    Я понимаю, но запрос на удаление не желает работать.
    11 сен 2017 в 10:14

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

    11 сен 2017 в 10:35

    После выполнения запросов ТАК И ДОЛЖНО БЫТЬ. Если в таблице 1 осталось что-то, чего нет в таблице 2 — неправильно отработало Если в Таблица2 нет записей из Таблица1, то добавляем их в Таблица2, если в таблице 2 осталось что-то, чего нет в таблице 1 — неправильно отработало если в Таблица1 нет записей из Таблица2, то из Таблица2 переносим их в Таблица3. Вывод — после обработки таблицы 1 и 2 должны быть идентичны.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *