【发布时间】:2016-06-20 15:52:26
【问题描述】:
我最近开始学习 SQL 并使用 SQL-EX 进行练习。我试图绕开我的头但无法找到相关信息的一件事是结合了 UNION 的 AS 语句。
根据以下内容,我可以在执行 UNION 后将我的数据“按原样”存储:
SELECT * FROM (SELECT MODEL, PRICE FROM PC
UNION
SELECT MODEL, PRICE FROM LAPTOP
UNION
SELECT MODEL, PRICE FROM PRINTER) AS A
WHERE A.MODEL IN (SELECT MODEL FROM PRODUCT WHERE MAKER = 'B')
但是,为什么以下不可能? JOIN 不会创建我也可以命名为“AS”的数据集吗?
Select distinct maker from (SELECT *
FROM Product INNER JOIN
PC ON PC.model = Product.model) as a
where a.speed > 450
感谢您的帮助!
【问题讨论】:
-
在为表(或视图)引用分配别名的上下文中,
AS关键字在某些数据库(例如 Oracle ),并且在大多数其他数据库(MySQL、SQL Server 等)中完全可选。我个人的偏好是从不使用带有别名的AS关键字一个表引用,并且 always 包含列别名的AS关键字(即使它在那里也是可选的,我认为包含它可以更清楚地表明我们的意思是列别名,并且这不仅仅是 SELECT 列表中两个表达式之间的“缺少逗号”。) -
我怀疑“不是以下可能的”问题与
AS关键字不相关,而是由于内联视图查询返回duplicate 列名...两列名为model。确切的错误消息在数据库之间会有所不同,但可能会包括包含“重复列名”行的文本。但是,我们真的只是在猜测,没有任何迹象表明正在使用 什么 RDBMS(Oracle、PostgreSQL、SQL Server、MySQL、Teradata 等),也没有任何迹象表明返回的错误消息数据库。)