[英]Inner Join Invalid Object Name
尝试做一个简单的内部联接查询,但不断出错
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和SchmaNames完全相同,但是2个表之间的Alias列不同。
两个select语句均按预期工作,但内部联接的错误为
“无效的对象名称'订单'”
即使我不使用表别名,而是键入表的完整路径,也会出现此错误
我很惊讶这就是您遇到的错误。 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
。
使用不同的表别名而不是key word of SQL(Order)
,另一个问题别名表存在于两个表中,因此在选择中使用table.column,并且您的联接需要如下
Select Customer.Alias from Db.SchmaName.Customers as Customer
inner join Db.SchmaName.Orders as O
on Customer.Alias = O.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
实际上是
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;
Order是SQL中的关键字。 您不能在SQL中使用关键字作为别名,除非您在别名周围加上[]。 我将使用其他名称作为别名。
您的问题中有两个查询。
这是一
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
赋予表Orders
的Alias
,即ORDER
。 相反,您应该在ON
子句上引用Alias,就像这样
Select Order.Alias, Customer.Alias
from Db.SchmaName.Orders as Order
INNER JOIN Db.SchmaName.Customers as Customer on Order.Alias = Customer.Alias
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.