内部联接无效的对象名称

时间:2018-09-28 07:56:19

标签: sql sql-server join

尝试做一个简单的内部联接查询,但不断出现错误

Select Alias from Db.SchmaName.Customers as Customer
Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

两个表的Db和SchmaName完全相同,但Alias列不同。

这两个select语句均按预期工作,但内部联接的错误为

  

“无效的对象名称'订单'”

即使我不使用表别名,而是输入表的完整路径,我也会收到此错误

5 个答案:

答案 0 :(得分:2)

我很惊讶这就是您遇到的错误。 ORDER是SQL Server中的保留字,请勿将其用于对象名和别名,您应该会得到以下错误:

  

'order'附近的语法不正确。

不要为对象名称使用保留词(甚至实际上不是关键词),或者,如果需要,请使用引号([Order])。我个人会这样做:

SELECT Alias --This is missing an alias as well, so would be ambigous
FROM Db.SchmaName.Orders O
     INNER JOIN Customer C ON C.Alias = O.Alias;

别名对于使您的SQL简洁非常有用。将表Customers别名为Customer并没有真正做到这一点。许多人(例如我本人)倾向于使用几个字符为表添加别名。因此,对于Customer,我使用了C。就个人而言,我倾向于在对象名称中使用特定单词的字母。例如,如果我有一个名为StockItem的表,则可能会使用SI。对于我称为ic_BD_HPT1的表,我使用HPT1

答案 1 :(得分:1)

使用不同的表别名而不是key word of SQL(Order),两个表中都存在Alias列,因此在选择和选择中使用table.column 您的加入需求如下

Select Customer.Alias from Db.SchmaName.Customers as Customer
inner join Db.SchmaName.Orders as O
 on Customer.Alias = O.Alias

答案 2 :(得分:1)

那些是两个查询,而不是一个。

Select Alias from Db.SchmaName.Customers as Customer
Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

实际上是

Select Alias from Db.SchmaName.Customers as Customer;

Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias;

第二个查询无效,因为它试图将Order别名与其自身相连。

要连接两个表,您需要在FROM,JOIN语句中指定表本身。如果要选择两个表中都存在的一列,则必须明确指定所需的列,例如:

Select Order.Alias 
from Db.SchmaName.Orders as [Order]
Inner Join Db.SchmaName.Customers as Customer 
    on Customer.Alias = [Order].Alias;

ORDER是一个关键字,表示您需要将其括在方括号中或使用更好的别名。实际上,Orders很好:

Select Orders.Alias 
from Db.SchmaName.Orders 
Inner Join Db.SchmaName.Customers as Customer 
    on Customer.Alias = Orders.Alias;

答案 3 :(得分:0)

Order是SQL中的关键字。您不能在SQL中使用关键字作为别名,除非您在别名周围加上[]。 我将使用其他名称作为别名。

答案 4 :(得分:0)

您的问题中有两个查询。

这是一个

Select Alias from Db.SchmaName.Customers as Customer

这是第二个

Select Alias from Db.SchmaName.Orders as Order
Inner Join Order on Customer.Alias = Order.Alias

您遇到的错误是第二个查询, 您正在尝试将JOIN与您已赋予表Alias的{​​{1}}相对,即Orders。相反,您应该在ORDER子句上引用别名,就像这样

ON
相关问题