【问题标题】:Full outer join in AccessAccess 中的完全外部联接
【发布时间】:2017-08-04 08:38:10
【问题描述】:

我有一个包含 FULL OUTER JOIN 的查询,我想在 Access 中实现它。

我知道这可以在访问中使用 UNION 查询来完成,但我完全不知道如何。我读了一些文章,但没有理解。这是我想在访问中重写的 SQL Server 查询。通过描述它的工作原理帮助我理解它。

SELECT tblPurchaseMain.Purchase_Date, tblPurchaseDetail.Quantity, tblPurchaseDetail.Rate, 
tblProduct.Product_Name, tblProductCategory.Product_Category_Name, tblSupplier.Supplier_Name,
tblSupplier.Supplier_Address, tblSupplier.Supplier_Phone_No, tblCompany.Company_Name,
tblPurchaseDetail.Amount, tblPurchaseDetail.Discount, tblPurchaseMain.TotalAmount,
tblPurchaseMain.Service_Tax, tblPurchaseDetail.TaxableAmount, 
tblPurchaseDetail.Purchase_Main_ID, tblPurchaseDetail.VAT,
tblPurchaseMain.Purchase_Other_Charges 
FROM 
tblPurchaseDetail
INNER JOIN 
tblPurchaseMain ON tblPurchaseDetail.Purchase_Main_ID = tblPurchaseMain.Purchase_Main_ID
INNER JOIN 
tblProduct ON tblPurchaseDetail.Product_ID = tblProduct.Product_ID 
INNER JOIN 
tblProductCategory ON tblProduct.Product_Category_ID = tblProductCategory.Product_Category_ID
INNER JOIN 
tblSupplier ON tblPurchaseMain.Supplier_ID = tblSupplier.Supplier_ID 
FULL OUTER JOIN 
tblCompany ON tblPurchaseMain.Company_ID = tblCompany.Company_ID 
WHERE 
(tblPurchaseMain.Purchase_Main_ID =" & _PurchaseBillNo & ") 
AND 
(tblPurchaseMain.Company_ID = " & CompanyID & ")".

谢谢。

【问题讨论】:

  • 任何类型的 JOIN 都与 UNION 没有共同之处,完全不同。任何一方都无法完成对方所做的事情。那么你到底想完成什么?
  • 我想要基于 MS-Access 中上述查询的结果。上面的查询在 SQL Server 上运行良好,但由于使用 FULL OUTER JOIN 而在 Access 上失败

标签: sql-server ms-access join full-outer-join


【解决方案1】:

考虑使用中间保存的查询来保存所有INNER JOIN 表,然后通过运行LEFT JOINRIGHT JOIN 的联合,在FULL OUTER JOINCompany 表中使用这些表。

而且,因为 MS Access SQL 要求将表配对包装在括号内的 JOIN 子句中,其中一些可以嵌套连接(见下文),因此建议使用 Access 的查询设计器构建查询,如果使用MSAccess.exe GUI 程序。此外,为了语法简洁,请考虑使用表别名。

内部查询

SELECT m.Purchase_Date, d.Quantity, d.Rate, p.Product_Name, c.Product_Category_Name,
       s.Supplier_Name, s.Supplier_Address, s.Supplier_Phone_No, m.Company_ID, d.Amount,
       d.Discount, m.TotalAmount, m.Service_Tax, d.TaxableAmount, d.Purchase_Main_ID,
       d.VAT, m.Purchase_Other_Charges
FROM (((PURCHASE_MAIN m INNER JOIN PURCHASE_DETAIL d 
        ON m.Purchase_Main_ID = d.Purchase_Main_ID) 
INNER JOIN PRODUCT p ON d.Product_ID = p.Product_ID) 
INNER JOIN PRODUCT_CATEGORY c ON p.Product_Category_ID = c.Product_Category_ID) 
INNER JOIN SUPPLIER s ON m.Supplier_ID = s.Supplier_ID;

外部查询 (此处仅一对表不需要括号)

SELECT q.Purchase_Date, q.Quantity, q.Rate, q.Product_Name, q.Product_Category_Name,
       q.Supplier_Name, q.Supplier_Address, q.Supplier_Phone_No, c.Company_Name, q.Amount, 
       q.Discount, q.TotalAmount, q.Service_Tax, q.TaxableAmount, q.Purchase_Main_ID, q.VAT,
       q.Purchase_Other_Charges
FROM PRODUCT_INNERQ AS q 
LEFT JOIN COMPANY AS c ON q.Company_ID = c.Company_ID

UNION ALL

SELECT q.Purchase_Date, q.Quantity, q.Rate, q.Product_Name, q.Product_Category_Name, 
       q.Supplier_Name, q.Supplier_Address, q.Supplier_Phone_No, c.Company_Name, q.Amount, 
       q.Discount, q.TotalAmount, q.Service_Tax, q.TaxableAmount, q.Purchase_Main_ID, q.VAT, 
       q.Purchase_Other_Charges
FROM PRODUCT_INNERQ AS q 
RIGHT JOIN COMPANY AS c ON q.Company_ID = c.Company_ID
WHERE (((q.Company_ID) IS Null));

请注意:MS Access 中没有UNION 查询的图表表示。以上两组是单独运行的SELECT 语句。注意箭头方向。

【讨论】:

    【解决方案2】:

    查看FullOuterJoin in Access 但是,由于涉及的表数量,您的要求似乎要复杂得多。也许需要打破这一点。查询采购、产品和供应商表。然后在带有 Company 表的 LEFT 和 RIGHT 查询的 UNION 中使用该查询。

    【讨论】:

    • 谢谢。链接未正确粘贴。我知道你告诉我的解决方案。我只是想通过应用上述查询来了解它是如何工作的。
    猜你喜欢
    • 2011-11-02
    • 2011-07-26
    • 1970-01-01
    • 2014-12-18
    • 2014-08-21
    • 2021-11-17
    相关资源
    最近更新 更多