2013-02-27 90 views
2

我用心靈在我的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://stackoverflow.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

回答

4

根據您的數據庫,您應該可以使用類似的東西。

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' 
2

以下語法應該在任何數據庫工作:

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

如果我理解正確的話,你可以使用:

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