2015-10-21 70 views
-2

当我写下面的查询,该消息返回我怎样才能让左连接两个条件(ON子句)

消息512,级别16,状态1,行 子查询返回多个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。

请问如何解决。

SELECT PD.ProductID, PD.DesignID, PDCI.ColorID, 
     PD.TotalPrice, PD.PictureName, P.ProductTitle, 
     P.Quantity, P.Availability, P.TodayDeal, 
     P.NewArrival, P.Bestseller, P.Likes, 
     P.CreatedOn, D.Name, PDCI.ColorImage 
FROM [Diwan].tbProductDesigns PD  
LEFT JOIN [Diwan].tbProducts P 
     ON P.ProductID = PD.ProductID 
LEFT JOIN [Design].tbDesignCover D 
     ON D.DesignID = PD.DesignID 
LEFT JOIN [Diwan].tbProductDesignColorImages PDCI 
     ON PDCI.ProductID = PD.ProductID 
     AND PDCI.DesignID = PD.DesignID 
WHERE PD.DesignID = 2 

从评论:总价使用此功能计算列:

ALTER FUNCTION [dbo].[fnTotalProductPrice] (
    @ProductID BIGINT, 
    @DesignID BIGINT 
) 
RETURNS MONEY 
AS 
BEGIN 
    RETURN (
     SELECT P.Price + D.SellingPrice 
     FROM Diwan.tbProductDesigns PD 
     LEFT JOIN Diwan.tbProducts P ON PD.ProductID = P.ProductID 
     LEFT JOIN Design.tbDesignCover D ON PD.DesignID = D.DesignID 
     WHERE PD.ProductID = @ProductID 
     AND PD.DesignID = @DesignID 
    ) 
END 
+3

你的查询有没有子查询。因此,错误陈述似乎非常非常不可能。 –

+1

是从视图中选择的那些对象中的任何一个,还是您将部分查询留给了您? – Dan

+0

您发布的代码不会给出该错误。除非有任何计算中的列正在播放,或者任何源代码都隐藏在视图中。 –

回答

0

我不明白为什么功能是必要的:

SELECT PD.ProductID, PD.DesignID, PDCI.ColorID, 
     (P.Price + D.SellingPrice) AS TotalPrice, PD.PictureName, P.ProductTitle, 
     P.Quantity, P.Availability, P.TodayDeal, 
     P.NewArrival, P.Bestseller, P.Likes, 
     P.CreatedOn, D.Name, PDCI.ColorImage 
FROM [Diwan].tbProductDesigns PD  
LEFT JOIN [Diwan].tbProducts P 
     ON P.ProductID = PD.ProductID 
LEFT JOIN [Design].tbDesignCover D 
     ON D.DesignID = PD.DesignID 
LEFT JOIN [Diwan].tbProductDesignColorImages PDCI 
     ON PDCI.ProductID = PD.ProductID 
     AND PDCI.DesignID = PD.DesignID 
WHERE PD.DesignID = 2 
+0

Totalprice是计算栏,并希望它自动插入 – Ahmed

+0

插入哪里?你是说这不会返回'TotalPrice'的正确值吗? – Morpheus

相关问题