【发布时间】:2016-06-28 00:06:59
【问题描述】:
我遇到了一个问题,因为我试图在内部联接中进行显式联接,我试图从另一个表中选择某些值。
我的 SQL:
SELECT A.OrderID
, A.ItemID
, A.Line
, B.LID
, B.Quantity
FROM Sales A
INNER JOIN (SELECT X.OrderID
, X.Line
, SUM(X.Quantity) AS Quantity
, X.DestinationID
, X.SerialNum
FROM SalesDetail X
WHERE X.OrderID = A.OrderID
GROUP BY X.OrderID, X.Line, X.DestinationID, X.SerialNum
) AS C
ON A.Line = C.Line
AND B.Quantity = C.Quantity
AND B.SerialNum = C.SerialNum
INNER JOIN SalesContents B
ON A.OrderID = B.OrderID
AND A.ItemID = B.ItemID
WHERE A.OrderID = '12345'
AND A.ItemID = 'ABC123';
现在我可以删除 X 表中的 WHERE 子句并在内连接中过滤它,但我想在查询值时正确过滤它。有没有办法重写这个语句,以便可以解决未绑定的标识符?
【问题讨论】:
-
只需将条件
AND B.Quantity = C.Quantity AND B.SerialNum = C.SerialNum移动到joinSalesContents B(别名)之后。 -
您的查询毫无意义。连接条件在定义之前引用表别名。我发现对表别名使用表缩写很有帮助(例如,
s表示sales而不是a)。如果您修复查询以正确排序条件并删除子查询中的where子句,您也许可以自己修复查询。
标签: sql sql-server tsql