簡體   English   中英

當兩個表需要在文本列上連接時該怎么辦?

[英]What to do when two tables need to be joined on text columns?

我有兩個表,一個名為AllData的鏈接表和一個稱為MIUOffset的普通表。 它們都有一個名為MIUType的文本列。 我需要在MIUType上連接兩個表,而Inner Join MIUOffset on AllData.MIUType = MIUOffset.MIUTypeInner 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM