【发布时间】:2015-07-21 00:15:28
【问题描述】:
我有一个 SQL 表,其中包含姓名、地址和一些与代码配对的相关数字数据。该表的结构使得每个数字代码对都有自己的行,其中包含冗余地址信息。下面的简写,我们就叫它tblPeopleData
Name Address ArbitraryCode ArbitraryData
----------------------------------------------------------------------------
John Adams 45 Main St, Rochester NY a 111
John Adams 45 Main St, Rochester NY a 231
John Adams 45 Main St, Rochester NY a 123
John Adams 45 Main St, Rochester NY b 111
John Adams 45 Main St, Rochester NY c 111
John Adams 45 Main St, Rochester NY d 123
John Adams 45 Main St, Rochester NY d 124
Jane McArthur 12 1st Ave, Chicago IL a 111
Jane McArthur 12 1st Ave, Chicago IL a 231
Jane McArthur 12 1st Ave, Chicago IL a 123
Jane McArthur 12 1st Ave, Chicago IL b 111
Jane McArthur 12 1st Ave, Chicago IL c 111
Jane McArthur 12 1st Ave, Chicago IL e 123
Jane McArthur 12 1st Ave, Chicago IL e 124
我的问题是该表绝对庞大(约 1000 万行),我正在尝试将其拆分以使遍历变得不那么缓慢。
到目前为止,我所做的是制作一个仅包含地址的表格,使用类似:
SELECT DISTINCT Address FROM tblPeopleData (etc.)
留给我:
Name Address
------------------------------------------
John Adams 45 Main St, Rochester NY
Jane McArthur 12 1st Ave, Chicago IL
...只是地址列表。我希望能够查找每个地址并查看该地址中存在哪些名称,因此我为每个地址分配了一个 UniqueID,这样现在我就有了(该表在我的数据集中大约有 500,000 行):
Name Address AddressID
--------------------------------------------------------
John Adams 45 Main St, Rochester NY 000001
Jane McArthur 12 1st Ave, Chicago IL 000002
为了能够按地址查找人员,我需要将此 AddressID 字段添加到 tblPeopleData,以便 tblPeopleData 中的每个地址都与其 AddressID 相关联,并将其添加到每一行,这样我就可以:
Name Address ArbitraryCode ArbitraryData AddressID
----------------------------------------------------------------------------------------
John Adams 45 Main St, Rochester NY a 111 00001
John Adams 45 Main St, Rochester NY a 231 00001
John Adams 45 Main St, Rochester NY a 123 00001
John Adams 45 Main St, Rochester NY b 111 00001
John Adams 45 Main St, Rochester NY c 111 00001
John Adams 45 Main St, Rochester NY d 123 00001
John Adams 45 Main St, Rochester NY d 124 00001
Jane McArthur 12 1st Ave, Chicago IL a 111 00002
Jane McArthur 12 1st Ave, Chicago IL a 231 00002
Jane McArthur 12 1st Ave, Chicago IL a 123 00002
Jane McArthur 12 1st Ave, Chicago IL b 111 00002
Jane McArthur 12 1st Ave, Chicago IL c 111 00002
Jane McArthur 12 1st Ave, Chicago IL e 123 00002
Jane McArthur 12 1st Ave, Chicago IL e 124 00002
如何从我的唯一地址表中的 AddressID 的 UniqueID 跳转到将这些全部添加到我的tbPeopleData 中对应地址的每一行?
【问题讨论】:
-
这里需要三个表。一个用于名称,另一个用于地址,第三个用于任意数据。名称表将具有地址表的外键,而任意数据表将具有名称/人员表的外键。
-
我可以试试这个。实际上已经有一个预先存在的唯一 ID 绑定了 ArbitraryData 和 Person,所以我可以毫不费力地拆分它。
标签: sql sql-server tsql