摘要沒有外鍵的數據庫表必須在多個unexisting行nvarchar的田間試驗結果
好了,早在2007年我被要求出示一小塊的軟件,目的是輸入人員來加盟姓名,地址和電話號碼。
目前,唯一的要求是能夠按街道名稱對此列表進行分組。因此,地址中的街道名稱就足夠了。
現在已經是第三年了,每年有一次我把這些街道名稱和部門重組在一起,這讓我很頭痛。只有「市中心」,「上游城市」,「125e」,「超過125e」和「陌生」的街道我無法分類。
的數據樣本和結構
我有其創建軟件第一次被傳送的初始表。我將它作爲SQL Server,因爲我將數據導入到它中以便於工作。
CREATE TABLE Contacts (
ContactId int not null identity(1, 1) primary key
, lastname nvarchar(50) not null
, firstname nvarchar(20) not null
, civic nvarchar(10) not null
, street nvarchar(20) not null
, city nvarchar(20) not null
, phone bigint not null
)
-- With the following sample data:
insert into Contacts (lastname, firstname, civic, street, city, phone)
values (N'LNAME-5551231234', N'A', N'89', N'MY STREET', N'SHAWINIGAN', 5551231234)
GO
insert into Contacts (lastname, firstname, civic, street, city, phone)
values (N'LNAME-5559879876', N'FNAME', N'10', N'YOUR STREET', N'SHAWINIGAN', 5559879876)
GO
insert into Constacts (lastname, firstname, civic, street, city, phone)
values (N'LNAME-5554564567', N'AFNAME', N'25', N'HIS STREET', N'SHAWINIGAN-SUD', 5554564567)
GO
然後,我添加了正確拼寫正確的街道名稱和另一個不同部門的表格。
-- Sectors
CREATE TABLE Sectors (
sectorId int not null identity(1, 1) primary key
, sectorName nvarchar(20) not null
)
GO
insert into Sectors (sectorName)
values (N'Downtown')
GO
insert into Sectors (sectorName)
values (N'Upper city')
GO
-- Streets
CREATE TABLE Streets (
streetId int not null identity(1, 1) primary key
, sectorId int not null references Sectors (sectorId)
, streetName nvarchar(20) not null
)
GO
insert into Streets (sectorId, streetName)
values (1, N'My St.')
GO
insert into Streets (sectorId, streetName)
values(1, N'Ur Street')
GO
insert into Streets (sectorId, streetName)
values (2, N'HIS STREET')
GO
這將導致,對於解釋的好處:
Sectors
sectorId | sectorName
---------------------
1 | Downtown
2 | Upper city
Streets
streetId | sectorId | streetName
--------------------------------
1 | 1 | My St.
2 | 1 | Ur Street
3 | 2 | HIS STREET
Contacts
contactId | lastname | firstname | civic | street | city | phone
--------------------------------------------------------------------------------------------
1 | LNAME-5551231234 | A | 89 | My Street | SHAWINIGAN | 5551231234
2 | LNAME-5559879876 | FNAME | 10 | Your Street | SHAWINIGAN | 5559879876
3 | LNAME-5554564567 | AFNAME | 25 | HIS STREET | SHAWINIGAN-SUD | 5554564567
目的
我來解決街道名稱衝突,由於正射。首先,Contacts.street
似乎存在Streets.streetName
中存在的一個值。因此,當我與相等的(=
)符號進行比較時,我只能得到大約6000行,當時城市的人口約爲13000人。
正因爲如此,我嘗試加入表,並像條款,但我可以收集大約20,000行,用重複姓氏,名字,從Contacts
公民,手機信息的組合。
除此之外,我似乎缺乏精確度或不知道如何說,但當我使用像,我得到了一些奇怪的結果。
得到的結果是,例如,讓我們考慮一下我在街上125E街在Streets
,並具有12E街,25E街在Contacts
,那麼它看起來像的聯繫是重複的,因爲這兩個街道符合的模式,如模式。 (生產數據理解起來會容易得多,但這些是人們的地址和電話號碼,所以我不能......)
查詢動心到目前爲止
,該查詢產生的那種上述重複信息,但僅從Contacts
重複的信息,如從記錄Streets.streetName
變化到另一個在此查詢的範圍。此外,例如,此查詢使得看起來像是有多個地址的信息,例如A LASTNAME-5551231234。
select c.city
, s.sectorName
, st.streetName
, c.civic
, c.lastname
, c.firstname
, c.phone
from Contacts c
inner join Streets st on st.streetName like N'%' + c.street + N'%'
inner join Sectors s on s.sectorId = st.sectorId
group by c.city
, s.sectorName
, st.streetName
, c.civic
, c.lastname
, c.firstname
, c.phone
order by c.city
, s.sectorName
, st.streetName
, c.civic
, c.lastname
另一個查詢,從中我也喜歡鼓舞,因爲它看起來像它會產生正確的結果,當我們刪除從Contacts
表儘可能多的信息儘可能自己。
最後,我自己很困惑,我不希望你們中的任何一個,專業開發人員和DBA能用一個簡單的答案來幫助我,但是通過一個演練和一個實證方法,所以我願意嘗試你可能會想到的,我還沒有想到的事情。
感謝您提供的任何幫助。 =)
最長.... ....後永遠... – 2010-12-07 04:59:14
@Abe Miessler:LOL爲笑謝謝!雖然我現在只想哭。客戶需求變更讓我在數據庫中看到這一點。我只是想確保我已經投入足夠的元素從某個地方獲得幫助。 =) – 2010-12-07 05:34:27