尝试使用表别名选择null作为列名

时间:2013-11-08 01:37:02

标签: sql sql-server tsql

我遇到了一个问题,我正在处理表别名并遇到一个奇怪的问题。当我不使用表别名时,我可以使用null作为列名,但如果我使用表别名,我会遇到问题。

works!

select top 10 eid, null as emp_no from employee 

does not work!!

select top 10 e.eid, null as e.emp_no from employee e

有出路吗?当我加入另一张桌子时,我遇到了一个问题。

Trying to make it work !

select top 10 e.eid, null as e.emp_no, ed.desgination from employee e 
inner join employee_designations ed on e.eid=ed.eid


Error 

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '.'.

2 个答案:

答案 0 :(得分:9)

尝试:

select top 10 e.eid, null as emp_no from employee e

您可以使用别名NULL,但如果您声称它来自表别名e,那么SQL将会产生异议。

<强>更新

要在联接中使用NULL,请将其转换为子查询:

SELECT  e.eid
        , e.emp_no
FROM    (
            SELECT  TOP 10 eid
                    , NULL AS emp_no
            FROM    employee
        ) AS e

将子查询别名为e,现在SQL很乐意接受NULLe.emp_no

答案 1 :(得分:0)

我不是百分百肯定,但是这个错误被抛出,因为当你为一个列赋值时,这不再是你的表列,只是一个'虚拟'列,所以这就是为什么你不能给该列的别名,只是因为这不是列表

为什么呢?如果表具有相同的列名,它会返回Ambiguous column name,但是你要分配一个值,所以你没有得到这个列名,你可以在查询synthax中简单地做null as emp_no,因为这emp_no不是来自内连接synthax的任何列,只需调用:

select top 10 e.eid, null as emp_no, ed.desgination from employee e 
inner join employee_designations ed on e.eid=ed.eid