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 更新在哪里和的主要内容,如果未能解决你的问题,请参考以下文章