繁体   English   中英

具有别名表名称的两个查询“ select语句”之间的区别

[英]Difference between two queries 'select statement' with alias table name

我想问一下这两个查询之间的区别:

select ProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

select p.ProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

(p是表Product的别名)

在sql server management studio 2008 R2中它们之间有什么区别? 当我执行第一个脚本时,它已成功执行,但是对于第二个脚本,我收到一条错误消息“'='附近的语法不正确”。

有人可以向我解释一下吗? 谢谢。

在第一种情况下, ProductName不是表列,而是别名 这样想:

select case when p.ProductID is null then 'Unknown' else p.ProductName end as ProductName

在第二个不正确的查询中,您试图做一些非法的事情,因为您试图同时从表中选择一列并分配给它,就像它是从表达式生成的别名一样。

我认为您的困惑是您认为ProductName始终是一列,因为在该表中有一个具有该名称的列,但是在这种情况下ProductName 不是列名; 它是case语句结果的别名 因此,当您尝试使用p.ProductName您要告诉SQL引擎从p表中选择ProductName列,然后尝试分配一个case语句,就好像它是一个别名(不在p.ProductName上下文中) 。

您可以轻松地为case语句使用任何名称,因为它是别名。 你可以做:

select DerivedProductName = case when p.ProductID is null then 'Unknown' else p.ProductName end

该示例是否更清楚地表明您在使用这种语法时不会处理列名?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM