【问题标题】:Query table value aliasing in Oracle SQLOracle SQL 中的查询表值别名
【发布时间】:2011-02-20 04:36:53
【问题描述】:

我在 SQL for Oracle 10g 中有一个家庭作业,我必须将联合应用于两个不同的选择语句,以返回两列。我需要 vendor_state 下每个单元格的值来指示 CA 和另一个状态中的每个其他值返回“外部 CA”,以指示它们在其他地方。

我应用了联合并为 CA 生成了两列和列表,但是列出了许多其他状态 ID,我找不到关于如何更改查询本身的实际值的解释。最终,我偶然发现了一个答案,但我无法解释为什么会这样。代码如下:

  SELECT vendor_name, 
         vendor_state
    FROM vendors 
   WHERE vendor_state IN 'CA'
UNION
  SELECT vendor_name, 
         'Outside CA' AS vendor_state
    FROM vendors
   WHERE vendor_state NOT IN 'CA'
ORDER BY vendor_name

这给了我我需要的确切答案,但我不知道为什么第二个 select 语句中的别名会以这种方式表现......我的教科书中没有给出解释,我读过的任何内容都没有表明该列别名可以像这样完成。但是,通过切换列名和别名值,我替换了返回的值而不是列名本身......我不是在抱怨结果,但如果我知道我是如何做到的,这将有所帮助。

【问题讨论】:

    标签: sql oracle oracle10g union alias


    【解决方案1】:

    诀窍是:

    在第一个 SELECT 中,“vendor_state”是表中字段本身的值。而且,由于 WHERE 子句,您将只有 'CA'

    在第二个 SELECT 中,“vendor_state”不是数据库字段中的值。相反,它只是文字值“Outside CA”的别名

    因为两个名称都匹配(根据 UNION 的要求),您的最终结果“看起来”所有值都来自同一个地方,而实际上它们并没有。

    也许这会显示得更好:

    SELECT vendor_name, vendor_state, vendor_state AS vendor_state_new
      FROM vendors 
     WHERE vendor_state IN 'CA'
     UNION
    SELECT vendor_name, vendor_state, 'Outside CA' AS vendor_state_new
      FROM vendors
     WHERE vendor_state NOT IN 'CA'
    ORDER BY vendor_name
    

    现在,对于这两个查询,vendor_state 显示数据库值。 calculated_state 显示第一个选择的数据库值,第二个选择的“外部 CA”。

    在您的查询中,vendor_state 扮演我的vendor_state_new 的角色:显示第一个数据库值,第二个计算值。并且 AS 在第一个 SELECT 中被省略,因为 vendor_state AS vendor_state 将是多余的(但它可以用于澄清目的,并且当您在给定的列名称中混合计算值和“原始”值时这样做是一个很好的习惯)

    【讨论】:

    • 非常感谢!这很有意义……我的教科书提供了很多示例,但没有解释选择元素背后的机制或数据类型之间的关系……这给了我很大的洞察力。非常感谢!
    • 首先,纠正自己:对于UNION,它不是真正需要匹配的NAME,而是它们的DATATYPE。由于 vendor_state 数据库字段和“外部 CA”字面值都是 VARCHAR,因此可以
    • 第二...你确实意识到你不需要一个 UNION ,对吧?一个案例..当..那么建设会好多更好。谷歌为此。也许这对你来说有点高级,但它比 UNION 更适合这个查询。由于您的问题更多是关于学习别名而不是优化查询。我没有提到它。但是,当您只需要在单个列中进行简单测试时,请避免使用 UNION。
    猜你喜欢
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多