【发布时间】:2011-08-09 15:08:06
【问题描述】:
所以我尝试在 MS Access 2003 上进行完全加入,但发现它不支持它。因此,我尝试使用我的两个 select 语句,然后使用 LEFT join 加入一个,并使用相同的语句创建一个 UNION,但使用 RIGHT join。 Access 给了我一个错误,说 JOIN 命令有问题。这里有一些 sql...
SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum,
tbl_Inventory.Color, tbl_Inventory.InInventory,
tbl_Inventory.OutInventory,
(tbl_Inventory.Stocks + tbl_Inventory.InInventory -
tbl_Inventory.OutInventory) AS Balance,
tbl_Inventory.Weight, tbl_Inventory.CF,
(tbl_Inventory.Weight *Balance) AS TotalWeight,
(tbl_Inventory.CF * Balance) AS TotalCF,
tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate,
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut,
tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory
ON tbl_Vendors.vid = tbl_Inventory.VendorID)
LEFT JOIN tbl_ItemHistory
ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum
ORDER BY tbl_Inventory.ItemNum, tbl_ItemHistory.orderDate
对不起,如果这不是代码格式,我猜访问 sql 只是普通文本。这个只有左连接。如果您有任何想法,请说出来。谢谢!
编辑:2步连接,
SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum, tbl_Inventory.Color,
tbl_Inventory.InInventory, tbl_Inventory.OutInventory,
(tbl_Inventory.Stocks+tbl_Inventory.InInventory-tbl_Inventory.OutInventory) AS Balance,
tbl_Inventory.Weight, tbl_Inventory.CF, (tbl_Inventory.Weight*Balance) AS TotalWeight,
(tbl_Inventory.CF*Balance) AS TotalCF, tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate,
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut, tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory ON tbl_Vendors.vid = tbl_Inventory.VendorID) LEFT JOIN
tbl_ItemHistory ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum;
UNION ALL
SELECT tbl_Vendors.VendorName, tbl_Inventory.ItemNum, tbl_Inventory.Color,
tbl_Inventory.InInventory, tbl_Inventory.OutInventory,
(tbl_Inventory.Stocks+tbl_Inventory.InInventory-tbl_Inventory.OutInventory) AS Balance,
tbl_Inventory.Weight, tbl_Inventory.CF, (tbl_Inventory.Weight*Balance) AS TotalWeight,
(tbl_Inventory.CF*Balance) AS TotalCF, tbl_Inventory.NoteOrder, tbl_ItemHistory.orderDate,
tbl_ItemHistory.POHistory, tbl_ItemHistory.InorOut, tbl_ItemHistory.Unit
FROM (tbl_Vendors INNER JOIN tbl_Inventory ON tbl_Vendors.vid = tbl_Inventory.VendorID) RIGHT
JOIN tbl_ItemHistory ON tbl_Inventory.ItemNum = tbl_ItemHistory.ItemNum;
错误:不支持连接表达式。第一段代码适用于左外连接。我尝试了两个左连接并且有效。它只是没有接受我的正确加入......
【问题讨论】:
-
当未包含在 UNION ALL 查询中时,RIGHT JOIN 部分是否可以正常工作?
-
您的字段列表包含表达式
AS Balance,然后尝试在其他字段表达式中引用Balance:TotalWeight;和 TotalCF。把这两个放在外面,直到你让剩下的工作正常。如果错误消息具有误导性,那将是一种耻辱,而实际问题是数据库引擎对Balance是这个复杂的查询感到困惑。 -
@HansUp 感谢您的评论。我试过了,它仍然没有用,但是使用你的理由我去取出以前的内部连接并且它有效,我猜访问不能同时处理太多的连接?不太确定,但我会制作单独的视图,然后制作一个完整的视图,希望这足够简单,可以计算谢谢!