【发布时间】:2019-06-16 16:23:10
【问题描述】:
我对两个非常相似的 PostgreSQL 语句之间有疑问:
-
UPDATE classes SET year = 1 FROM professors WHERE (professors.class = classes.class) AND professors.name = 'Smith'`这个好像内联
classes表和professors表,只更新classes中对应教授姓名为Smith的记录。 -
UPDATE classes c SET year = 1 FROM classes cl JOIN professors on (professors.class_id = cl.class_id) WHERE professors.name = 'Smith'`这会更新类中的每条记录。为什么这句话和第一个不一样?
【问题讨论】:
-
据我了解,第一种是在PostgreSQL中对两个表执行和UPDATE-JOIN的标准方式。
-
第二个
c.*和cl.*没有链接。因此c.的每条记录都由FROM术语中的每个 结果行更新。 -
如果您想在
from子句中显式引用classes,请在where子句中添加另一个谓词:cl.class_id = c.class_id。此外,您的数据似乎没有标准化,即您似乎希望联接与class_id或class等效。
标签: postgresql join sql-update