实际上,我对两个SQL查询感到困惑。两者都给我相同的结果,但是哪个是首选,何时使用它们中的每一个?
UPDATE Names
SET Names.PhoneNumber = Phones.PhoneNumber
FROM Names INNER JOIN Phones ON Names.id = Phones.id
UPDATE Names
SET Names.PhoneNumber = Phones.PhoneNumber
FROM Phones WHERE Names.ID = Phones.ID
答案 0 :(得分:1)
它们是相同的。实际上,他们应该生成相同的执行计划。
尽管没有理由选择一个,但通常使用JOIN
格式。原因很简单:SQL Server不支持UPDATE
表的别名。因此,这不起作用:
UPDATE Names n
SET n.PhoneNumber = p.PhoneNumber
FROM Phones p
WHERE n.id = p.id;
但是,这很好:
UPDATE n
SET n.PhoneNumber = p.PhoneNumber
FROM Names n INNER JOIN
Phones p
ON n.id = p.id;
还可以使用显式JOIN
来使用LEFT JOIN
。
不利的一面是,隐式JOIN
版本与更多数据库兼容-特别是Postgres支持此语法。
答案 1 :(得分:0)
您观察到相同的结果,因为它们的含义相同。两种查询的区别在于性能。 当我们执行两个查询时,性能会有所不同,这是由于计划者将执行计划放在一起所致。 WHERE子句->他的计划者正在选择一条更有效的路线 联接->通过在两列上添加索引,我们可能可以使联接工作更快(如果不是更快)。
答案 2 :(得分:0)
不应有任何性能差异。您可以同时使用两种方法,这完全取决于您。