MS SQL-执行简单联接

MS SQL-执行简单联接,sql,sql-server,ssms,Sql,Sql Server,Ssms,我从头开始学习MS SQL,并尝试在表上创建联接,但我的查询有问题: SELECT * FROM Users.[User] JOIN Users.[User] as u ON (u.id = Users.[UserAddress].user); Msg 156, Level 15, State 1, Line 1 Incorrect syntax near the keyword 'user'. 有什么不对:)?User是一个关键字,因此要访问“User”列,必须将其放在方括号中: SE

我从头开始学习MS SQL,并尝试在表上创建联接,但我的查询有问题:

SELECT * FROM Users.[User] JOIN Users.[User] as u ON (u.id = Users.[UserAddress].user);


Msg 156, Level 15, State 1, Line 1
Incorrect syntax near the keyword 'user'.


有什么不对:)?

User是一个关键字,因此要访问“User”列,必须将其放在方括号中:

SELECT * FROM Users.[User] JOIN Users.[User] as u ON (u.id = Users.[UserAddress].[user]);

User是一个关键字,因此要访问“User”列,必须将其置于方括号中:

SELECT * FROM Users.[User] JOIN Users.[User] as u ON (u.id = Users.[UserAddress].[user]);

user
是SQL Server中的保留字,因此需要将其括在方括号中。保留字列表为

我建议将您的问题写为:

SELECT *
FROM Users.[User] u JOIN
     Users.UserAddress ua
     ON u.id = ua.[user];
注意:这也解决了您似乎想要加入
UserAddress
而不是自加入
User
的问题

还有一些建议:

  • 为所有表使用表别名。它们使查询更易于阅读和编写
  • 表格别名应为表格的缩写
  • 避免对表名和列名使用保留字
  • 避免使用方括号(除非你真的需要);它们使查询更难书写和阅读

此外,我通常以复数形式(
Users
)给我的表命名,主键为单数(
UserId
),然后总是尝试让外键具有相同的名称(
UserId
),在这两种情况下。

user
在SQL Server中是一个保留字,因此需要将其括在方括号中。保留字列表为

我建议将您的问题写为:

SELECT *
FROM Users.[User] u JOIN
     Users.UserAddress ua
     ON u.id = ua.[user];
注意:这也解决了您似乎想要加入
UserAddress
而不是自加入
User
的问题

还有一些建议:

  • 为所有表使用表别名。它们使查询更易于阅读和编写
  • 表格别名应为表格的缩写
  • 避免对表名和列名使用保留字
  • 避免使用方括号(除非你真的需要);它们使查询更难书写和阅读

此外,我通常用复数(
Users
)给我的表命名,主键用单数(
UserId
),然后总是尝试让外键具有相同的名称(
UserId
);或者更好,不用。我还将指定连接类型、内部、外部、左、右、交叉。我认为这将有助于你的理解。这就像学习数学,你不是从捷径开始,而是展示所有的工作;或者更好,不用。我还将指定连接类型、内部、外部、左、右、交叉。我认为这将有助于你的理解。这就像学习数学一样,你不是从捷径开始,而是展示所有的工作。谢谢你的提示和快速反应!:)它可以工作,但maangement studio在“(u.id=ua.[user])”中强调“Users.UserAddress”和“ua.[user]”。第一条消息是无效的对象名称,第二条消息是:“无法绑定多部分标识符'ua.user'。为什么会发生这种情况?“多部分标识符'ua.user'无法绑定”我已通过清除缓存解决了这一问题谢谢提示和快速响应!)它可以工作,但maangement studio在“(u.id=ua.[user])”中强调“Users.UserAddress”和“ua.[user]”。第一条消息是无效的对象名称,第二条消息是:“无法绑定多部分标识符'ua.user'。为什么会发生这种情况?“无法绑定多部分标识符‘ua.user’”我已通过清除缓存修复了这一问题