【图片如下】
【问题:】
每个公司都会有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