在Oracle SQL中查询表值别名

Str*_*ata 2 sql oracle union alias oracle10g

我在Oracle for Oracle 10g中有一个家庭作业,我必须将union应用于两个不同的select语句,以返回两列.我需要在vendor_state下的每个单元格的值来指示CA和另一个状态中的每个其他值返回"Outside CA",以表明它们在其他地方.

我应用了union并生成了两列和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
Run Code Online (Sandbox Code Playgroud)

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

Mes*_*ion 5

诀窍是:

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

在第二个SELECT中,"vendor_state"不是数据库字段中的值.相反,它只是字面值'外部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
Run Code Online (Sandbox Code Playgroud)

现在,对于两个查询,vendor_state显示数据库值.并calculated_state显示第一个SELECT的数据库值,以及第二个的"Outside CA".

在您的查询中,vendor_state执行my vendor_state_new:show database value for 1st,计算值为2nd 的角色.并且AS在第一个SELECT中被省略,因为vendor_state AS vendor_state它是多余的(但它可以用于澄清目的,并且当你在给定的列名称中混合计算和"原始"值时这是一个很好的习惯)