【问题标题】:More Efficient Method Substitution than Subqueries比子查询更有效的方法替换
【发布时间】:2021-04-25 04:28:47
【问题描述】:

我有一个 SQL 查询,我需要用同一张表中的另一个东西替换某些东西。我不知道如何解释它,但我会尝试提供我现在对 SQL 代码的一般想法:

SELECT 
    ItemCode,
    CASE
        WHEN Name = 'Alpha' THEN (SELECT Name FROM stuff WHERE Name = 'Gama')
        ELSE Name
    END 
FROM <a bunch of joined tables>

样本数据:

ItemCode      Name     Location
Itm-1         Alpha    Loc-Alpha
Itm-2         Bravo    Loc-Bavo
Itm-4         Gama     Loc-Gama

期望的结果:

ItemCode      Name     Location
Itm-1         Gama     Loc-Gama
Itm-2         Bravo    Loc-Bavo
Itm-4         Gama     Loc-Gama

我希望这是有道理的,因为我已经严重压缩了整个代码。为了使事情更加复杂,我会多次使用 select 子查询。基本上我试图避免使用子查询,我相信这会由于多个选择语句而延长执行时间。如果有人能提供任何建议,我将不胜感激。

谢谢!

【问题讨论】:

  • SELECT Name FROM stuff WHERE Name = 'Gama' 将只返回Gama,如果存在的话。符合预期?
  • 样本数据和期望的结果将阐明您想要做什么。您正在使用的数据库的标签可以更容易地回答问题。
  • 抱歉,因为这是我第一次作为主动询问者。让我弄清楚如何添加示例数据。
  • @GordonLinoff 我添加了示例数据和所需的结果。我希望这有帮助。如果我需要添加任何其他内容,请告诉我。
  • 为什么要关注“子查询”?这听起来像是您缺乏经验。但是您发布的查询至少完成了您想要的一半 - 对吗?所以唯一的另一个问题是位置列中的替换。正确的?也许您通过将“alpha”替换为“gama”而过度简化和过于复杂的事情,而“gama”已经存在于您的实际数据和期望的结果中。您可以使用 STUFF() 替换字符串 - 一个很好的起点。

标签: sql sql-server replace subquery


【解决方案1】:

如果我理解正确,您只需要case 表达式:

SELECT ItemCode,
       (CASE WHEN Name = 'Alpha' THEN 'Gama' ELSE Name END) as name
FROM <a bunch of joined tables>

【讨论】:

  • 对不起,我应该指定我正在运行 MS SQL 2008。(我们目前正在进行升级项目)我相信我只能使用 CASE 语句,但我不记得了。
  • CASE 是标准 SQL,并已被 SQL Server 支持。 . .好吧,我想是永远。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-20
  • 2021-11-12
  • 2017-03-26
  • 1970-01-01
相关资源
最近更新 更多