SQL实例系列 之三

ER图
产品 与 供应商实现多对多关系,但是每个产品有一个默认供应商,这个字段记录在产品-供应商表(正确应该写入产品表);采购员 和 供应商也实现多对多关系,供应商有一个默认的采购员,写入了采购员-供应商(应该写入供应商表才对)。

现在问题是,要根据一个SKU,获取默认的采购员代码(就是要进入采购员表)。流程如下,先根据SKU定位到产品ID,根据这个产品ID到产品-供应商表中获取到供应商代码,用这个代码到采购员-供应商表中获取采购员ID,用这个ID到采购员表中获取采购员代码。

这个过程少说要搞5个查询…..

试着分析一下,产品有默认供应商,供应商有默认采购员,那么不就意味着产品有默认采购员吗?这样的话,就应该把默认供应商和默认采购员写入产品表中,当要获取供应商和采购员时都非常容易(也高效)。但是目前不是这样搞的。最终使用如下SQL实现这个需求:

SELECT u.采购员 FROME 产品表 p LEFT JOIN 产品多属性表 pv ON p.pid=pv.pid JOIN 产品-供应商表 pp ON pp.pid=p.pid AND pp.is_default=1 JOIN
(采购员-供应商 ppu JOIN采购员 u ON u.uid=ppu.uid AND ppu.is_default=1)
ON pp.supplier_code = ppu. supplier_code
WHERE if(p.is_var,pv.sku,p.sku)=SKU

很费劲,有么有?

数据模型设计的重要性在这里充分体现出来。