【发布时间】:2015-11-19 14:57:42
【问题描述】:
抱歉标题 - 我很难简洁地表达它
所以我有一些数据目前都在一个表中,我希望将它存储在两个不同的表中。这是我的情况的一个简单版本:
Person:
+----+-----------+----------+----------+
| Id | FirstName | LastName | City |
+----+-----------+----------+----------+
| 1 | Billy | Bob | Toronto |
| 2 | Billy | Bob | Mumbai |
| 3 | Sally | Ann | Toronto |
| 4 | Joe | Hall | New York |
| 5 | Joe | Hall | Boston |
+----+-----------+----------+----------+
所以我有一群人和他们的城市。我想让它这样一个给定的名字/姓氏组合只出现一次,第二个表描述了名称 id 城市组合,如下所示:
Person:
+----+-----------+----------+
| Id | FirstName | LastName |
+----+-----------+----------+
| 1 | Billy | Bob |
| 3 | Sally | Ann |
| 4 | Joe | Hall |
+----+-----------+----------+
LivesIn:
+----------+----------+
| PersonId | City |
+----------+----------+
| 1 | Toronto |
| 1 | Mumbai |
| 3 | Toronto |
| 4 | New York |
| 4 | Boston |
+----------+----------+
我的问题是:如何仅选择每个名称组合的第一个实例插入到第二个表中?要准确地移动数据,我可以这样做:
INSERT INTO LivesIn (PersonId, City)
SELECT Id, City
FROM Person
但这意味着LivesIn 仍然会有两个不同的PersonIds 到相同的名称组合。
【问题讨论】:
-
我建议你再走一步,创建一个城市表。然后你有一个 CityPerson 表,它只是 City 和 Person 表中的主键。否则,您将一遍又一遍地重复数据。
-
这实际上基本上是我所拥有的 - 实际上,“城市”是另一个表的 GUID。我只是认为在示例中为该列添加文本会更简单。 :)
-
哈哈 KISS 的好主意。 :D
标签: sql sql-server normalization