2013-03-05 108 views
0

无法使其工作。我有一个表'Players',其中有一个主键'Id',其中还有一个'Name'列。另一个'预订'表有一个'PlayerId'列,它引用'Players.Id'。MySQL - 从子查询中更新列

我刚才添加一列“名称”为“预订”,这需要包含玩家的名字的实际拷贝。

我想设置填写所有名称中使用下面的语句预订:

UPDATE Bookings SET Name = (SELECT Name FROM Players WHERE Players.Id=Bookings.PlayerId); 

但我得到的是错误1263:“列设置为默认值,提供给NOT NULL列“名称NULL '在0行'。

我做错了什么?

回答

1

试试这个:

update Bookings, Players 
set Bookings.Name = Players.Name 
where Bookings.playerId = Players.Id 

你必须确保有PlayersBookings(这是我认为这使得任何意义的唯一途径)之间的一对一关系。

+0

但是,这的确行得通!谢谢。 – nmw01223 2013-03-05 21:00:48

1

为此目的使用MYSQL UPDATE JOIN。这是你需要的查询:

UPDATE Bookings 
LEFT JOIN Players 
ON Players.Id=Bookings.PlayerId 
SET Bookings.Name = Players.Name 
+0

似乎没有工作,同样的错误。应该说,Bookings.PlayerId可以是NULL。尝试添加WHERE Bookings.PlayerId <> NULL作为整个谓语 - 即摆脱了错误,但随后没有名称的列得到了设定的。 – nmw01223 2013-03-05 20:57:18