如何显示一个表中的所有记录,而另一个表中的每个半相关记录呢?

时间:2019-02-13 22:59:02

标签: sql sql-server view

这个问题很难解释,我什至不知道如何正确地称呼它,所以我事先对此表示歉意。

我对产品的看法如下:

产品
ProductId
产品名称

在我的数据库中,我有一个价目表和一个价目表产品表。一个价目表的标题可能是“第1级客户”,相应的RatecardProduct记录将是该特定价目表的产品价格。它可能仅包含少数几种产品的价格,而并非全部。

价目表
RatecardId
RatecardName

RatecardProduct
RatecardProductId
RatecardId
产品编号 单价

问题是我需要创建一个显示所有价目表的所有产品的视图。如果价目表/产品组合在我的价目表产品表中没有对应的单价,则应显示NULL或0。

假设我有10个产品和4个价目表;该视图将包含40条记录,即使RatecardProduct表完全为空

之所以需要这样做,是因为我在查看价目表时填充了gridview,并且我不想为了确定是否有相应的价格而对每一行进行往返。

非常感谢您。

1 个答案:

答案 0 :(得分:3)

生成所有行。然后使用left join引入数据:

select p.*, r.*, coalesce(rp.unitprice, 0) as unitprice
from products p cross join
     ratecards r left join
     ratecardproduct rp
     on rp.productid = p.productid and rp.ratecardid = r.ratecardid;

或者如果您想使用coalesce(),请不要使用NULL