【问题标题】:PostgreSQL Update Where AndPostgreSQL 更新在哪里和
【发布时间】:2015-06-16 06:25:32
【问题描述】:

我的问题是我有 2 个表,1 个是教练,1 个是工具

  • 教练(cid,名字,姓氏,工具号)
  • 工具(工具号,注册号)

我想通过使用 registNo 将教练“Will Smith”的 toolNo 更改为 10。 然而我的代码改变了每个人的工具不,但不仅仅是史密斯的。

insert into coach values ('c2','will','smith',5)
insert into tool values ('10', 'R123')

    UPDATE coach
SET toolNo = t.toolNo 
From coach c,  tool t
WHERE t.registNo = 'R123'  
AND c.forename ='Will'
AND c.surname = 'smith';

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    加入 UPDATE 语句时,您只需在 FROM 语句中列出要加入的表,但要更新的表已在查询顶部 SET 之前说明。

    此外,根据这个SO question,您必须使用不带ON 子句的老式连接方法。

    UPDATE coach
       SET coachtoolNo = t.toolNo 
      FROM tool t 
     WHERE t.registNo = 'R123'  
       AND coach.forename ='Will'
       AND coach.hsurname = 'smith';
    

    您在上面的问题中是 Coach 和 Tool 之间的交叉联接,然后再次与 Coach 交叉联接,导致每条记录都更新。

    【讨论】:

    • 我已经设置了一个内部连接并打开,但它仍然改变了教练的所有工具否
    • 这很好奇。我希望 sqlfiddle.com 能醒来,这样我就可以玩一会儿了。咖啡还没有开始,所以仅仅盯着 SQL 并没有多大帮助。
    • OK 咖啡开始了...现在更新答案。
    • 这可能还需要稍微调整一下……但总的来说这个想法是正确的。在 postgresql.org/docs/9.1/static/sql-update.html 上阅读有关 Postgres 更新的更多信息
    • 我已经在 WHERE 中删除了 coach.toolno = t.toolno 时解决了这个问题
    猜你喜欢
    • 2012-12-01
    • 2012-10-05
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多