SQL查询更新INNER连接表

SQL查询更新INNER连接表

问题描述:

我用心灵在我的2个表的连接是GuestInfo订房SQL查询更新INNER连接表

select RoomNo, DateStart, DateEnd, GuestFName, GuestMName, GuestLName 
from GuestInfo inner join Reservation 
on GuestInfo.GuestID = Reservation.GuestID 

现在,我想更新内心的连接表

update (select RoomNo, DateStart, DateEnd, GuestFName, GuestMName, GuestLName 
from GuestInfo inner join Reservation 
on GuestInfo.GuestID = Reservation.GuestID) set EndDate = '1/20/2014' 
where GuestFName = 'JAKE' 

但这查询错误。这可能吗?

+0

您无法更新内部联接的结果。您只能更新其中一个基表。如果您使用别名来显示列的来源,这将非常有帮助。 – 2013-02-27 20:13:14

+0

另外,看看这个问题:http://*.com/questions/1293330/how-can-i-do-an-update-statement-with-join-in-sql。您使用的是什么RDMS? – Gijs 2013-02-27 20:13:51

+1

什么是确切的错误信息?你正在使用哪些DBMS?甲骨文? Postgres的? – 2013-02-27 20:19:26

根据您的数据库,您应该可以使用类似的东西。

SQL服务器:

update r 
set r.DateEnd = '2014-01-20' 
from Reservation r 
inner join GuestInfo g 
    on g.GuestID = r.GuestID 
where g.GuestFName = 'JAKE' 

的MySQL:

update Reservation r 
inner join GuestInfo g 
    on g.GuestID = r.GuestID 
set r.DateEnd = '2014-01-20' 
where g.GuestFName = 'JAKE' 

以下语法应该在任何数据库工作:

update reservation 
    set enddate = '1/20/2014' 
    where guestid in (select guestId from guestinfo where guestfname = 'Jake') 

如果我理解正确的话,你可以使用:

update reservation 
set EndDate = '1/20/2014' 
where GuestID in (select GuestID 
    from GuestInfo inner join Reservation 
    on GuestInfo.GuestID = Reservation.GuestID 
    and GuestFName = 'JAKE') 
+0

查看Gordon Linoff的回答,它比我的好! – 2013-02-27 20:18:38

+0

查询语法错误,当您使用IN子句时,您不能在子查询中返回多个列 – 2013-02-27 20:20:47