0

方案一 我有两个新字段要添加到名为existingTable 的表中。添加这些字段后,我可以使用这些字段的数据更新一些但不是所有的记录。会有空白条目,我对此很好。

问题一 我想确保更新了正确的记录。现有表和传入数据表的主键是电子邮件。

建议的解决方案一 看起来像这样的 UPDATE 查询就是解决方案。

UPDATE existingTable 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 On existingTable.Email = tableToJoinWith1.Email, tableToJoinWith1.Email = tableToJoiNWith2.Email

4

1 回答 1

0

澄清你的场景2。我假设你的意思是你想要所有的行,existingTable即使Email字段上没有与其他表中的任何一个匹配。在这种情况下, aLEFT JOIN是您想要的:

SELECT * FROM existingTable
LEFT JOIN tableToJoinWith1 ON existingTable.email = tableToJoinWith1.email 
LEFT JOIN tableToJoinWith2 ON existingTable.email = tableToJoinWith2.email 

对于场景 1,问题在于您没有给它任何类型的 SELECT for incomingDataTable. 据我所知,在标准 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)
于 2012-10-17T04:28:13.637 回答