以下是问题:
经理要求您检索低于150加元或超过300加拿大美元的所有产品的名称和价格。使用单个查询检索此用例所需的结果,并捕获查询及其执行的屏幕截图。确保以加元格式化结果。加元的货币符号与美元的货币符号相同,即“$”符号
我正在使用Oracle SQL开发人员,这是我的查询:
SELECT product_name,
to_char(price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar'),
'FML9999.00','NLS_CURRENCY= $')AS price_in_canadian_dollars
FROM Product
WHERE price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar')<= 150
OR (SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar') >= 300;
如果我执行此操作,我只能获得低于150美元的价格。如何更改此格式以便我可以获得要显示的产品&lt; 150加元或> 300加元,两者同时?
答案 0 :(得分:1)
在第二个where子句(OR ...)中,你错过了与price_in_use_dollars的乘法。您的比较大于汇率,这不太可能匹配: - )
您可能会考虑的其他优化措施: - 使用NOT BETWEEN,这样你只需要进行一次计算; - 将计算移到右侧,这样您就可以从price_in_us_dollars索引中受益
但这两者是相互排斥的 - 如果你将计算向右移动,你将不得不为每个参数之间重复计算。
答案 1 :(得分:0)
您忘记在&gt; = 300的情况下将price_in_us_dollars的汇率乘以。
SELECT product_name,
to_char(price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar'),
'FML9999.00','NLS_CURRENCY= $')AS price_in_canadian_dollars
FROM Product
WHERE price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar')<= 150
OR price_in_us_dollars *
(SELECT us_dollars_to_currency_ratio
FROM Currency
WHERE currency_name = 'Canadian Dollar') >= 300;