在更新中使用内部或左侧连接?

时间:2013-08-05 17:34:28

标签: sql sql-server sql-server-2008 tsql

虽然我的sql知识非常好,但在left执行inner时,我无法理解join vs update employee_table column1:id column2:socialsecurity private_info_table column1:id column2:socialsecurity 的差异。

employee_table.socialsecurity

我需要将private_info_table.socialsecurity更新为update e set e.socialsecurity=p.socialsecurity from employee_table e join private_info_table p --should this be left or inner join? on p.id=e.id

我应该进行左连接还是内连接:???

{{1}}

2 个答案:

答案 0 :(得分:2)

左连接

Select *
from A 
left join B on a.id = b.pid

在条件a.id = b.pid中,如果A(ieaid)中的值与B中的值不匹配,则A和B BUT 的每一行都会返回(即B ),B的所有字段都将为空。另一方面,对于满足此条件的行,将显示B的所有值。请注意,必须返回A的值,因为它位于“left”关键字的 left 上。

内部加入

Select *
from A 
inner join B on a.id = b.pid

对于a.id = b.pid为true的行返回行,否则如果为false则不返回任何行。这是一个互斥的联接。

在您的情况下,不使用左连接,因为'left'关键字左侧的所有记录都将使用null或非null值进行更新。这意味着您将根据我对左连接的描述无意中使用空值更新不匹配的记录。

答案 1 :(得分:1)

如果您只想更新两个表中的记录,那么它应该是内连接。如果您执行左连接,它会将employee表更新为null,无论在私有信息表中找不到id。

这个问题的原因是,如果您在员工表中有一些社交安全号码,而这些号码已经在私人信息表中找不到。你不想用空值擦除它们。