调试不明确的外部连接语句

Posted

技术标签:

【中文标题】调试不明确的外部连接语句【英文标题】:Debugging Ambiguous outer join statement 【发布时间】:2013-05-14 12:59:39 【问题描述】:

我是 MS Office Access 的新手,在为这个查询构建 SQL 视图时遇到了一些问题。我不断收到错误消息:“无法执行 SQL 语句,因为它包含不明确的外连接。要强制执行其中一个连接,请创建一个单独的查询来执行第一个连接并将该查询包含在您的 SQL 语句中”。

1) 我如何在 MS SQL 视图中创建一个单独的查询并将该查询包含到我的主 SQL 语句中???

2) 我不明白为什么会发生错误??

SELECT [Table : PurchaseDetails].PurchaseID
FROM [Table: Supplier] 
LEFT JOIN ([Table : Purchase] 

LEFT JOIN ([Table : Product]

LEFT JOIN [Table : PurchaseDetails] 

ON [Table : Product].ProductID = [Table : PurchaseDetails].ProductID)

ON [Table : Purchase].PurchaseID = [Table : PurchaseDetails].PurchaseID)

ON [Table: Supplier].SupplierID = [Table :   Purchase].SupplierID;

【问题讨论】:

【参考方案1】:

我不确定 Access,但在 SQL 中,ON 命令应该跟在 JOIN 后面,如下所示:

SELECT [Table : PurchaseDetails].PurchaseID
FROM [Table: Supplier] 
LEFT JOIN [Table : Purchase] 
ON [Table : Purchase].PurchaseID = [Table : PurchaseDetails].PurchaseID

LEFT JOIN [Table : Product]
ON [Table : Product].ProductID = [Table : PurchaseDetails].ProductID

LEFT JOIN [Table : PurchaseDetails] 
ON [Table: Supplier].SupplierID = [Table :   Purchase].SupplierID;

【讨论】:

【参考方案2】:

如何在 MS SQL 视图中创建单独的查询并将该查询包含到我的主 SQL 语句中?

您有一个涉及多个 LEFT JOIN 的查询,并且数据库引擎无法准确确定您希望表如何连接。具体来说,它已确定它将(或可能)根据应用 JOIN 的顺序返回不同的结果。

所以,它要求你

仅使用表的子集创建查询,

将该查询保存在 Access 中,然后

创建另一个查询,使用其他表和保存的查询来生成最终结果。

例如,您可以创建以下查询并将其保存在 Access 中为 Purchase_PurchaseDetails

SELECT Purchase.PurchaseID, Purchase.SupplierID
FROM Purchase LEFT JOIN PurchaseDetails
    ON Purchase.PurchaseID=PurchaseDetails.PurchaseID

然后您可以在 另一个 查询中使用该查询,例如,

SELECT Supplier.SupplierID
FROM Suppliers LEFT JOIN Purchase_PurchaseDetails
    ON Supplier.SupplierID=Purchase_PurchaseDetails.SupplierID

...或类似的东西。

【讨论】:

如何将查询保存为 Purchase_PurchaseDetails @user2284926 在 Access 中,选择 Create > Query Design,然后在 GUI 中构建查询或将 SQL 语句写入/粘贴到 SQL 视图中。然后单击“保存”,或者直接关闭查询,Access 会询问您是否要保存它。

以上是关于调试不明确的外部连接语句的主要内容,如果未能解决你的问题,请参考以下文章

使用 OleDB 列出所有存储过程和查询时出现不明确的外部连接错误

将两个 select 语句与外部连接连接在一起

连接池环境中是不是明确要求 statement.close()?

啥是左外部联结?

如何使用连接 USB 电缆调试在 Xcode 未启动的移动设备中执行的 iOS 应用程序

Windows、Linux和路由器的网络子接口-虚拟IP