我有很多查询,我想一步完成

时间:2019-01-07 18:31:52

标签: sql ms-access

如果有人可以帮助我,将不胜感激。

我可以说:
A)500行数据

  1. 我进行左联接,并找到符合项目的100行。我将其放在表1中
  2. 我再进行一次LEFT JOIN来找出其余400行数据,并将其放在表2中
  3. 我再次进行LEFT JOIN查找表2,以通过UPC查找匹配的200行数据。我把它放在表3中
  4. 然后我做一个UNION来加入表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上做一个UNION

感谢任何人都可以提供帮助。

山姆

2 个答案:

答案 0 :(得分:1)

它可能很难看,但嵌套查询应该是可能的。

查询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]);

现在从Query1和Query2构建UNION查询。 UNION也可以使用嵌套,但是我不知道UNION中需要的字段,因此无法显示该结构。如果*字段通配符在每个SELECT中以相同顺序拉入相同的字段,则只需对两个语句进行UNION。请记住,第一个SELECT定义字段名称和数据类型。

保存到'temp'表中可以加快处理速度。但是,不能在1条SQL语句中完成保存到多个表中的操作。生成VBA过程以顺序运行SQL操作。

答案 1 :(得分:0)

由于MS-Access不支持CTE,因此也许可以使用纯表表达式。尝试看看是否可行:

TheNewFunc()