【问题标题】:How do I show all records from one table for each semi-related record in another?如何为另一个表中的每个半相关记录显示一个表中的所有记录?
【发布时间】:2019-02-14 07:02:11
【问题描述】:

这个问题很难解释,我什至不知道如何正确命名,所以我提前道歉。

我对产品的看法如下:

产品
产品编号
产品名称

在我的数据库中,我有一个 ratecard 表和一个 ratecard 产品表。价目表的标题可能是“Tier 1 Customers”,相应的 RatecardProduct 记录将是该特定价目表的产品价格。它可能只包含少数产品的价格,而不是全部。

价目表
RatecardId
价目表名称

RatecardProduct
RatecardProductId
RatecardId
产品编号 单价

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

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

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

非常感谢您。

【问题讨论】:

    标签: sql sql-server view


    【解决方案1】:

    生成所有行。然后使用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;
    

    如果你想要NULL,请不要使用coalesce()

    【讨论】:

    • 这绝对是正确的,戈登。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 2010-09-21
    • 1970-01-01
    • 2021-01-26
    • 2013-04-03
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多