在子征服中使用关系操作员



这是一个问题:

经理要求您检索所有>少于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加元,同时?

您忘了在> = 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;

在第二子句(或...)中,您错过了Price_in_use_dollars的乘法。您的比较大于汇率,这不太可能匹配: - )

您可能会考虑的其他优化: - 不使用之间,因此您只需要进行一次计算即可; - 将计算移至右侧,因此您可以从Price_in_us_dollars上的索引中受益

这两个是相互排斥的 - 如果将计算移到右边,则必须对两者之间的每个参数重复。

最新更新