[英]What to do when two tables need to be joined on text columns?
我有兩個表,一個名為AllData的鏈接表和一個稱為MIUOffset的普通表。 它們都有一個名為MIUType的文本列。 我需要在MIUType上連接兩個表,而Inner Join MIUOffset on AllData.MIUType = MIUOffset.MIUType
的Inner Join MIUOffset on AllData.MIUType = MIUOffset.MIUType
有效時,最終,它的速度令人無法忍受。
有沒有辦法在字符串字段上聯接表,並使它在任何地方都可以像在數字字段上聯接一樣快地工作?
我的后備計划是修改其數據庫中的鏈接表,使其具有一個整數字段,以用作MIUType數據的數字鍵,但是如果可以避免的話,我寧願不這樣做。
我最終想做的是將添加/減去列作為where語句的一部分,並且MIUOffset表具有每個唯一MIUType的偏移量。 結果方程式類似於AllData.[0] + MIUOffset.Offset < -95
AllData.[0] + MIUOffset.Offset < -95
。
因此,除了在核心數據結構中添加與MIUType數據等效的數字鍵,或重組代碼以遍歷每個MIUType然后在末尾加總結果之外,還有什么方法可以這樣做?
我希望解決方案嚴格在sql中進行,但這都是在VBA中完成的,因此如果有人有任何建議,還有其他選擇。
有沒有辦法在字符串字段上聯接表,並使它在任何地方都能像在數字字段上聯接一樣快地工作?
你不知道 而是,您對表進行規范化 。 根據定義 ,在數字字段上進行連接要比在字符串字段上進行連接快得多。
兩列中MIUType
中的值重復多少次?
我的后備計划是修改其數據庫中的鏈接表,使其具有一個整數字段,以用作MIUType數據的數字鍵,但是如果可以避免的話,我寧願不這樣做。
那不是一個“后備計划”,它首先應該是正確的設計。 我不知道您為什么要避免這種情況 。
制作一個單獨的表以一次存儲所有可能的值,然后將每個值映射到一個數字ID(如果鏈接的源位於SQL Server上,則自動編號主鍵字段將具有/ identity
)。
然后將MIUTypeId
列添加到表中,並運行更新以通過數值ID鏈接值。 然后刪除冗余的MIUType
字符串列,從現在開始,您加入MIUTypeId
以獲取關聯的字符串值。 如果這破壞了20個報告和15個視圖,請不要刪除該列,而要修復20個報告和15個視圖以使用新字段,然后在字符串列上的依賴性全部消失時,將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.