【发布时间】:2015-11-01 23:32:13
【问题描述】:
我想从oc_product, oc_product_description, oc_product_special 中选择记录product_id product_name actual_price discount_price。 oc_product_special 表包含产品的折扣价,但在某些产品上没有折扣,即 discount_price=0.0000。我想用他们的 discount_price 选择所有 40 种产品,如果 discount_price=0.0000 则在该行打印 NULL。
我试过的查询是:
SELECT oc_product_description.product_id,oc_product_description.name product_name, oc_product.price actual_price, oc_product_special.price discount_price
FROM oc_product
INNER JOIN oc_product_description
RIGHT OUTER JOIN oc_product_special ON oc_product_description.product_id = oc_product.product_id = oc_product_special.product_id`
它返回错误的输出,例如
product_id product_name actual_price discount_price
NULL NULL NULL 0.0000
NULL NULL NULL 0.0000
NULL NULL NULL 0.0000
NULL NULL NULL 0.0000
NULL NULL NULL 0.0000
NULL NULL NULL 0.0000
NULL NULL NULL 1950.0000
NULL NULL NULL 3850.0000
NULL NULL NULL 7500.0000
我希望得到这样的输出:
product_id product_name actual_price discount_price
1 yyyy 1000.0000 0.0000
2 xxxx 2000.0000 500.0000
【问题讨论】:
-
为您的表提供示例数据集
-
请显示 ddl。
-
您说的是 0.000,您希望该行中有 NULL,但您想要的结果显示为 0.000。这是一个错字,还是我误读了这个问题?
-
请注意,RIGHT JOIN 的使用极为罕见。对于每个 RIGHT JOIN,(理论上)都有一个功能相同的 LEFT JOIN,大多数人(包括我在内)会发现它更直观。我说“理论上”只是因为偶尔,在更复杂的查询中,很难弄清楚等价的 LEFT JOIN 是什么!
标签: mysql join inner-join outer-join