У меня много запросов, и я хочу сделать их в 1 шаг - PullRequest
0 голосов
/ 07 января 2019

Если кто-то может мне помочь, это будет оценено.

Я скажу:
А) 500 строк данных

  1. Я делаю левое соединение и нахожу 100 строк по пункту. Я положил это в таблицу 1
  2. Я делаю еще одно СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ, чтобы выяснить остальные 400 строк данных, и помещаю это в таблицу 2
  3. Я делаю еще одно СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ, чтобы найти в Таблице 2 информацию о совпадении 200 строк данных по UPC. Я положил это в таблицу 3
  4. Затем я делаю СОЮЗ, чтобы присоединиться к Таблице 1 и Таблице 3

Как видите, я делаю 4 шага. Как я могу сделать это за 1 шаг. Я знаю подзапрос, но когда я делаю это в доступе, он говорит: «Подзапрос не поддерживает.

Это мой настоящий код, и он работает:

1) Это помогает мне найти элементы, которые совпадают в моих 2 файлах.

SELECT [STEP 1: SYSCO_CITY_UPDATE].*, [MAT_INFO_NHS_UNIQUE_UPC].[Category Description] 
INTO [STEP 2: SYSCO_ITEM_CAPTURED]
FROM [STEP 1: SYSCO_CITY_UPDATE] 
LEFT JOIN MAT_INFO_NHS_UNIQUE_UPC 
ON [STEP 1: SYSCO_CITY_UPDATE].[MANUF PROD CODE] = VAL([MAT_INFO_NHS_UNIQUE_UPC].[Material]);

2) Это помогает мне узнать REST данных, которые не были сопоставлены:

SELECT [STEP 2: SYSCO_ITEM_CAPTURED].* INTO [STEP 3: SYSCO_REST]
FROM [STEP 2: SYSCO_ITEM_CAPTURED]
WHERE [STEP 2: SYSCO_ITEM_CAPTURED].[CATEGORY DESCRIPTION] IS NULL;

3) Это помогает мне узнать UPC, которые совпадают с остальными данными:

SELECT [STEP 3: SYSCO_REST].*, [MAT_INFO_NHS_UNIQUE_UPC].[Category Description] 
INTO [STEP 4: SYSCO_UPC_CAPTURED]
FROM [STEP 3: SYSCO_REST] 
LEFT JOIN MAT_INFO_NHS_UNIQUE_UPC 
ON [STEP 3: SYSCO_REST].[SCC] = VAL([MAT_INFO_NHS_UNIQUE_UPC].[SCC for Case or Pallet]);

Затем я делаю СОЮЗ по Таблице 1 и Таблице 3

Спасибо, если кто-нибудь может помочь.

Sam

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Это может быть ужасно, но могут быть возможны вложенные запросы.

Запрос 1

SELECT [STEP 1: SYSCO_CITY_UPDATE].*, [MAT_INFO_NHS_UNIQUE_UPC].[Category Description] 
FROM [STEP 1: SYSCO_CITY_UPDATE] 
LEFT JOIN MAT_INFO_NHS_UNIQUE_UPC 
ON [STEP 1: SYSCO_CITY_UPDATE].[MANUF PROD CODE] = VAL([MAT_INFO_NHS_UNIQUE_UPC].[Material])

Query2

SELECT [STEP 3: SYSCO_REST].*, [MAT_INFO_NHS_UNIQUE_UPC].[Category Description] 
FROM (SELECT [STEP 2: SYSCO_ITEM_CAPTURED].*
      FROM (SELECT [STEP 1: SYSCO_CITY_UPDATE].*, [MAT_INFO_NHS_UNIQUE_UPC].[Category Description] 
            FROM [STEP 1: SYSCO_CITY_UPDATE] 
            LEFT JOIN MAT_INFO_NHS_UNIQUE_UPC 
            ON [STEP 1: SYSCO_CITY_UPDATE].[MANUF PROD CODE] = VAL([MAT_INFO_NHS_UNIQUE_UPC].[Material])) AS [STEP 2: SYSCO_ITEM_CAPTURED]
      WHERE [STEP 2: SYSCO_ITEM_CAPTURED].[CATEGORY DESCRIPTION] IS NULL) AS  [STEP 3: SYSCO_REST] 
LEFT JOIN MAT_INFO_NHS_UNIQUE_UPC 
ON [STEP 3: SYSCO_REST].[SCC] = VAL([MAT_INFO_NHS_UNIQUE_UPC].[SCC for Case or Pallet]);

Теперь создайте запрос UNION из Query1 и Query2. UNION также может использовать вложенность, но я не знаю полей, необходимых в UNION, поэтому не могу показать эту структуру. Если подстановочный знак * поля вытягивал одинаковые поля в одном и том же порядке в каждом SELECT, просто объедините два оператора. Имейте в виду, что первый SELECT определяет имена полей и типы данных.

Сохранение в «временных» таблицах может быть оправдано, если это ускоряет обработку. Однако сохранение в несколько таблиц не может быть выполнено в 1 операторе SQL. Создайте процедуру VBA для последовательного запуска действий SQL.

0 голосов
/ 07 января 2019

Поскольку MS-Access не поддерживает CTE, возможно, вы можете использовать простые табличные выражения. Попробуйте и посмотрите, работает ли он:

select -- your third query here
from (
  select ... -- your first query
) step1,
(
  select ... -- your second query
) step2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...