当前位置: 代码迷 >> Sql Server >> 一个简单的多表连接有关问题,大神?
  详细解决方案

一个简单的多表连接有关问题,大神?

热度:63   发布时间:2016-04-24 09:29:48.0
一个简单的多表连接问题,大神??
【图片如下】

【问题:】
每个公司都会有5个产品p1~p5,每个公司会对应一个模版,我想筛选出“公司2”的五个产品
1、首先在Company表中查找
2、如果没找到就到对应的模版Temp_code列表中查找
3、如果对应的模版列表中也没有,就继承“基础模版”中的产品product   价格price

求sql语句
或者 有其他更好的数据库设计 也可以推荐一下 方便这种继承模式
------解决思路----------------------
这样的设计要对冗余字段做 DISTINCT 操作,不如改下设计:
Company (ID,Name,Temp_code)
Template(code,Name)
Product(CompanyID,Temp_code,name,price) 
说明:把原先的 (product,price)合并到Product表中(Product.product 看起来比较怪所以字段改名为 name 了);
其中 Company 移过来的 Temp_code 为 '',Template 移过来的 CompanyID 为 0。
WITH pc AS (
    SELECT p.name, p.price
      FROM Product p
     WHERE CompanyID = 1002
)
,tc AS (
    SELECT p.name, p.price
      FROM Product p
      JOIN Company c
        ON p.Temp_code = c.Temp_code
     WHERE c.ID = 1002
)
,t0 AS (
    SELECT p.name, p.price
      FROM Product p
     WHERE Temp_code = '000' --假定基础模板固定编码
)
    SELECT COALESCE(pc.name, tc.name, t0.name) AS name,
           COALESCE(pc.price, tc.price, t0.price) AS price
      FROM pc
 FULL JOIN tc
        ON tc.name = pc.name
 FULL JOIN t0
        ON t0.name = pc.name
        OR t0.name = tc.name
  相关解决方案