【问题标题】:Using relational operators in subqueries在子查询中使用关系运算符
【发布时间】:2017-02-17 23:22:42
【问题描述】:

问题来了:

经理要求您检索低于 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 美元的价格。如何更改此格式,以便我可以让产品同时显示 300 加元?

【问题讨论】:

    标签: sql oracle subquery operators


    【解决方案1】:

    在第二个 where 子句 (OR...) 中,您缺少与 price_in_use_dollars 的乘法。您的大于比较是针对汇率,这不太可能匹配:-)

    您可能会考虑的其他优化: - 使用 NOT BETWEEN,因此您只需计算一次; - 将计算移到右侧,这样您就可以从 price_in_us_dollars 上的索引中受益

    不过,这两者是互斥的 - 如果将计算向右移动,则必须对每个参数之间重复计算。

    【讨论】:

    • 最后一段不正确。 where price_in_us_dollars not between (150/&lt;rate&gt;) and (300/&lt;rate&gt;) 有什么问题? RHS 上的计算只进行一次,因为它们与行无关。优化技巧是完全正确的。
    【解决方案2】:

    在 >= 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;
    

    【讨论】:

    • 啊,现在可以了!犯了一个小错误……非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 2021-01-24
    • 2012-07-20
    • 2021-03-07
    相关资源
    最近更新 更多