PostgreSQL 更新在哪里和

Posted

技术标签:

【中文标题】PostgreSQL 更新在哪里和【英文标题】:PostgreSQL Update Where And 【发布时间】: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';

【问题讨论】:

【参考方案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 时解决了这个问题

以上是关于PostgreSQL 更新在哪里和的主要内容,如果未能解决你的问题,请参考以下文章

postgresql 上的更新类型

PostgreSQL 更新在哪里和

Postgresql字符串匹配在哪里

更新的Xubuntu,Postgres停止工作

如何获取 postgresql 中的前 10 个值?

设置 PostgreSQL,无法连接到数据库 postgres