我有三个表 - 一个用于运费,一个用于产品,一个用于特定产品的运费率例外.运费如下:每件商品都有运费,但此价格可以被例外所覆盖.如果产品不存在例外,则默认费率用于用户选择的运费. alt text http://mi6.nu/sqljoin.png 我正在尝试加入这些表,以便如果存在异常,则选择该价格,否则,选择默认价格但我遇到连接问题.我需要按产品ID查询,我有(第2行用于调试)
SELECT r.ID AS ShippingRateID, r.Name,
e.*, r.*
FROM shipping r LEFT JOIN shippingexceptions e ON r.ID = e.ShippingRateID
WHERE e.ProductID = 48
Run Code Online (Sandbox Code Playgroud)
我需要回复:
1 Uk and Northern Ireland 1
2 EU Eire... 10
3 US and Canada 2.16
4 Rest of world 2.44
Run Code Online (Sandbox Code Playgroud)
因此,如果存在例外,则使用例外价格,否则使用默认价格.我打算使用CASE语句,但我需要先返回数据.
为什么不使用coalesce
SELECT r.ID AS ShippingRateID, r.Name, coalesce(e.cost, r.defaultprice)
FROM shipping r LEFT JOIN shippingexceptions e ON r.ID = e.ShippingRateID
WHERE e.ProductID = 48
Run Code Online (Sandbox Code Playgroud)
这样,如果e.rate为null,则使用r.rate.
您还应该将e.ProductId放在连接上,这样就不会强制您只选择有异常的产品
SELECT r.ID AS ShippingRateID, r.Name, coalesce(e.cost, r.defaultprice)
FROM shipping r LEFT JOIN shippingexceptions e ON r.ID = e.ShippingRateID and e.ProductID = 48
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5213 次 |
| 最近记录: |