内部联接基于特定条件

时间:2014-12-17 07:48:30

标签: sql sql-server

分别有3个表品牌,产品和品牌产品。表格有以下结构。

Brand : id,BrandName
Product : id,ProductName
BrandProduct :id,Brandid,Productid,Prize,RetailerName

我想显示产品名称,奖品和零售商名称。这是我的询问。

select ProductName,Prize,RetailerName from BrandProduct BP
inner join Product P
on P.id = BP.Productid

当用户选择品牌时,只会出现该品牌记录。所以我更改了一个查询。它运作正常

  create proc_sample
   @Brandid int = null
   as
   begin
    select ProductName,Prize,RetailerName from BrandProduct BP
    inner join Product P
    on P.id = BP.Productid
    inner join Brand B
    on B.id = BP.Brandid
    where (@Brandid is null or BP.Brandid= @Brandid)
   End

当用户不选择品牌时,品牌的加入不应该来。任何想法?我知道动态sql进入图片。动态sql的替代品

1 个答案:

答案 0 :(得分:1)

无需加入Brand表,因为BrandProduct表包含BrandId。

select ProductName,Prize,RetailerName from BrandProduct BP
inner join Product P
on P.id = BP.Productid
where (@Brandid is null or BP.Brandid = @Brandid)