调试不明确的外部连接语句
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 列出所有存储过程和查询时出现不明确的外部连接错误
连接池环境中是不是明确要求 statement.close()?