场景一 我有两个新字段要添加到名为existingTable的表中。添加这些字段后,我可以使用这些字段的数据更新SOME但不包含所有记录。将有空白条目,我对此很好。
问题一 我想确保更新CORRECT记录。现有表和传入数据表的主键是Email。
建议的解决方案一 看起来像这样的UPDATE查询就是解决方案。
更新现有表格 SET existingTable.newField1 = incomingDataTable.newField1,existingTable.newField2 = incomingDataTable.newField2 WHERE existingTable.Email = incomingDataTable.Email
您怎么看?
情景二 使用新字段更新表后&在适当的记录中的数据,我想加入这个表与另外两个。我希望所有条目,即使某些字段为空,也在此连接中。我不希望排除任何记录。
顺便说一下,这些表中的每条记录与其他表中的伙伴有一对一的关系。不应该有任何重复的记录。在过去,我见过Access使用INNER JOIN,它排除了没有newField1和newField2值的记录。这不是我想要的。
问题 我没有经验加入牌桌。不同的联接对我来说有点混乱。
建议的解决方案 我使用的联接是否必然重要,因为三个待连接表应该具有一对一的关系?
SELECT * FROM existingTable FULL JOIN tableToJoinWith1,tableToJoinWith2 在existingTable.Email = tableToJoinWith1.Email,tableToJoinWith1.Email = tableToJoiNWith2.Email
答案 0 :(得分:0)
澄清您的场景2.我假设您想要existingTable
中的所有行,即使Email
字段与其他任何一个表都不匹配。在这种情况下,LEFT JOIN
就是您想要的:
SELECT * FROM existingTable
LEFT JOIN tableToJoinWith1 ON existingTable.email = tableToJoinWith1.email
LEFT JOIN tableToJoinWith2 ON existingTable.email = tableToJoinWith2.email
对于方案1,问题是您没有为incomingDataTable
提供任何类型的SELECT。在标准SQL中,据我所知,没有很好的方法来支持多列。所以它取决于你正在使用的数据库。有些人会允许你这样做:
UPDATE existingTable
SET newField1 = incomingDataTable.newField1, newField2 = incomingDataTable.newField2
FROM incomingDataTable
WHERE existingTable.Email = incomingDataTable.Email
但有些人不会。其他人会允许这样做:
UPDATE (Select * FROM existingTable JOIN incomingDataTable
ON existingTable.Email = incomingDataTable.Email)
SET existingTable.newField1 = incomingDataTable.newField1,
existingTable.newField2 = incomingDataTable.newField2
如果它只是一个列,你可以这样做,这是完全标准的:
UPDATE existingTable SET newField1 = (SELECT newField1 FROM incomingDataTable
WHERE existingTable.Email = incomingDataTable.Email)