sql - Oracle SQL 中查询表值别名

标签 sql oracle oracle10g union alias

我有一个有关 Oracle 10g 的 SQL 的家庭作业,其中我必须将 union 应用于两个不同的 select 语句,以返回两列。我需要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 语句中的别名会这样......我的教科书中没有给出任何解释,我读过的任何内容都表明该列别名可以这样完成。但是,通过切换列名和别名值,我替换了返回的值而不是列名本身...我不是在提示结果,但如果我知道我是如何做到的,那将会有所帮助。

最佳答案

诀窍是:

在第一个 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 显示第一个 SELECT 的数据库值,以及第二个 SELECT 的“外部 CA”。

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

关于sql - Oracle SQL 中查询表值别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5055269/

相关文章:

sql - 如何知道我有多少条未读的群消息

mysql - 根据另一个表结果进行选择和分组

oracle - Oracle 如何预测表大小?

sql - 总值 PL/Sql 之和

oracle - 在 PL/SQL 中并行化调用

sql - WHERE 子句中的多个条件

php - 尝试从 PHP 中删除 sql 查询时出现白屏

javascript - Node.js退出时如何释放Oracle数据库连接

tomcat - 无法理解使用 JPA、Tomcat、Oracle 的连接池错误

oracle - 特定存储过程或函数的源代码