2016-07-15 54 views
0

我有一个交易员(TRADERS)和他们的主管的表。 (监事是自己必须为贸易商新的监事(NEWSUPERVISORS)另一个表在子表上加入UPDATE查询

TRADERS - traderid,名监督员, NEWSUPERVISORS - traderid,监事

我需要更新贸易商表与新主管监事。

update traders set e.supervisor = n.supervisor from traders join 
(select traderid, supervisor from new_supervisor n) on e.traderid= n.traderid 

此查询不工作,请你可以建议什么是错的这个查询。

+3

您使用的RDBMS是什么?无法在许多平台的“UPDATE”语句中使用联接。另外,当你说它不起作用时,它以什么方式不起作用?你有错误信息吗? – ninesided

+0

我正在使用postgresql。我得到的错误是“交易者”关系的列“e”不存在。当我尝试@Pirate的查询时,我也遇到同样的错误 – megan

回答

0

这是标准的SQL:

update traders 
    set supervisor = (
        select n.supervisor 
         from new_supervisor n 
         where traders.traderid = n.traderid 
        ) 
where exists (
       select * 
       from new_supervisor n 
       where traders.traderid = n.traderid 
      ); 
0

一些SQL查询,根本就不是“更新”。如果将t o采取另一种方法,例如使用运行一个查询的存储过程来获取需要更新的trader_id,然后可能在TRANSACTION中依次循环该结果集,针对每个trader_id发出单独的update查询。

+0

SQL查询根本无法更新_by definition_。 – onedaywhen

+0

不一定如此。在Microsoft Access中,您*可以*创建“可更新记录集”。但仅限于某些类型的查询。但是,这显然是为了方便特定产品和自己的SQL引擎而完成的一个边缘案例。 –

+0

[查看更新一直是关系世界感兴趣的主题](https://books.google.co.uk/books?id=RXW4PtS4bEYC)。但是*查询数据库和更新数据库是完全不同的操作。当然,术语'附加查询','更新查询'和'删除查询'可以在MS Access文档中找到,但它们仍然是oyxmorons!在我的书中,MS Access没有资格作为SQL产品,因为它不符合SQL-92入门级标准,因此不能用于证据:) – onedaywhen