怎么可能/我应该写这个SQL查询?

时间:2014-07-03 10:20:46

标签: php sql oracle

我需要编写一个SQL查询来列出我们产品的客户价格。我们有一个标准价格表customer_no = 0和一个客户特定价格表customer_no = XXXX

我无法理解如何获取查询以返回产品的客户特定价格,如果他们已经获得此类产品,或者如果没有回退到标准价格。

获取标准价目表上的所有产品和价格

select     prices.product_id, products.product_desc, prices.m2
from       prices, products
where      prices.product_id = products.product_id
and        prices.customer_no = 0
order by   prices.product_id asc

获取客户专门引用的所有产品和价格

select     prices.product_id, products.product_desc, prices.m2
from       prices, products
where      prices.product_id = products.product_id
and        prices.customer_no = $_SESSION['customer']
order by   prices.product_id asc

如何执行第一个查询,但如果客户有自己的价格,那么用它替换它?这甚至可能吗?

提前致谢。

史蒂夫

编辑抱歉,错过了原帖中两个查询中的第三行。

2 个答案:

答案 0 :(得分:2)

您必须两次加入prices表,一次是列表价格,然后是报价。对后者使用LEFT JOIN,因为有些产品没有报价。然后使用NVL默认从报价到定价。

SELECT products.product_id, products.product_desc, NVL(p2.m2, p1.m2)
FROM products
JOIN prices p1 ON p1.product_id = products.product_id
LEFT JOIN prices p2 ON p2.product_id = products.product_id 
                    AND p2.customer_no = $_SESSION['customer']
WHERE p1.customer_no = 0

答案 1 :(得分:0)

尝试:

select     prices.product_id, products.product_desc, prices.m2
from       prices, products
where      prices.customer_no = nvl($_SESSION['customer'], 0)
order by   prices.product_id asc