我有一个有关 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/