为什么这个SQL要更新整个表

为什么这个SQL要更新整个表,sql,postgresql,Sql,Postgresql,我被一个典型的初学者错误击中了。好像我做了一个没有WHERE子句的更新 下面是SQL: "UPDATE teams SET description = ? " + "FROM teams t " + "JOIN team_memberships tm ON t.id = tm.team_id " + "JOIN users u ON tm.user_id = u.id " + "WHERE t.id = ? AND u.uid = ?"; 尽管t.id=?SQL仍然会更新整个表 。。。你能看

我被一个典型的初学者错误击中了。好像我做了一个没有WHERE子句的更新

下面是SQL:

"UPDATE teams SET description = ? " +
"FROM teams t " +
"JOIN team_memberships tm ON t.id = tm.team_id " +
"JOIN users u ON tm.user_id = u.id " + 
"WHERE t.id = ? AND u.uid = ?";
尽管t.id=?SQL仍然会更新整个表


。。。你能看到问题吗

使用select语句运行查询。 您将看到它将返回所有值

将左连接与第一个连接一起使用,应该可以解决您的问题。

试试这个

UPDATE teams AS t
SET description = ? 
FROM  team_memberships tm 
      JOIN users u ON tm.user_id = u.id 
WHERE t.id = tm.team_id AND
      t.id = ? AND u.uid = ?

请在执行上述语句之前先备份数据库

不,这不起作用,同样的问题您会收到什么错误消息?您正在设置什么参数?它会更新整个表。参数是正确的。“团队”(不是别名“t”!!)和其他团队之间没有关系。不管其他人怎么做,“团队”中的所有记录都必须更新。提示:不需要备份,只需打开一个事务,永远不要提交(在做了一些选择后将其回滚以检查更新所更改的内容)。哇,你让我大吃一惊。很酷。“请做备份”让我咯咯地笑了起来哦,这很有效。你真棒!我查看了这里的文档:发现它的语法与frm
MySQL
有些不同。