【问题标题】:sql query Update INNER JOINED tablesql 查询更新 INNER JOINED 表
【发布时间】:2013-02-27 20:09:42
【问题描述】:

我在我的 2 个表中使用 INNER JOIN,即 GuestInfo 和 Reservation

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

现在,我想更新那个 INNER JOINED TABLE

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'

但是这个查询是错误的。这可能吗?

【问题讨论】:

  • 您无法更新内部联接的结果。您只能更新其中一个基表。如果您使用别名来显示列的来源,这将非常有帮助。
  • 另外,看看这个问题:stackoverflow.com/questions/1293330/…。您使用的是什么 RDMS?
  • 确切的错误信息是什么?您使用的是哪个 DBMS?甲骨文? Postgres?

标签: sql


【解决方案1】:

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

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

    【讨论】:

      【解决方案3】:

      如果我理解正确,您可以使用:

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

      【讨论】:

      • 看 Gordon Linoff 的回答,比我的好!
      • 查询语法错误,使用IN子句时,子查询不能返回多于一列
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2020-08-04
      • 2016-02-09
      • 1970-01-01
      相关资源
      最近更新 更多