在Oracle SQL中查询表值别名

时间:2011-02-20 04:36:54

标签: sql oracle oracle10g union alias

我在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

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

1 个答案:

答案 0 :(得分: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

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

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