0

2我有以下两个带有相关字段的表:

Values: id, data, quantity
Items: id, data, price

匹配取决于字段:id、data。我正在尝试加入这两个表,以便如果对于相同的 id 和数据在 Values 中有一个元素,但在 Items 中没有,则价格设置为 0;而如果 Items 中有元素但 Values 中没有元素,则字段数量设置为 0。

到目前为止,我已经编写了以下代码,但它没有返回任何东西!!!

 SELECT     dbo.Values.id, dbo.Values.data, dbo.Values.quantity, dbo.Items.price
 FROM       dbo.Values FULL OUTER JOIN
            dbo.Items ON dbo.Values.id = dbo.Items.id AND dbo.Values.data = dbo.Items.data

例子:

Values                          Items                            Join
(1, 05/07/2013 00:00:00, 2)     (1, 05/07/2013 00:00:00, 20)     (1, 05/07/2013 00:00:00, 2, 20)  
(2, 23/06/2013 00:00:00, 50)    (2, 03/02/2013 00:00:00, 1000)   (2, 23/06/2013 00:00:00, 50, 0)  
                                                                 (2, 03/02/2013 00:00:00, 0, 1000)  
4

2 回答 2

1

您的加入效果很好,但是您没有使用 coalesce 或 isnull ... 解决它。

SELECT     ISNULL(dbo.[Values].id, dbo.Items.id ), ISNULL(dbo.[Values].DATA, dbo.Items.DATA), ISNULL(dbo.[Values].quantity, 0), ISNULL(dbo.Items.price, 0)
FROM       dbo.[Values] 
FULL OUTER JOIN dbo.Items ON dbo.[Values].id = dbo.Items.id AND dbo.[Values].data = dbo.Items.DATA
于 2013-07-05T07:52:00.503 回答
0

FULL OUTER JOIN 返回两个表的所有值,即使条件不匹配。因此,您的查询返回两个表的所有行。

于 2013-07-05T07:39:24.990 回答