2014-01-16 25 views
1

我提前道歉,因爲這個問題在本網站多次以各種形式,但沒有我試過實施的解決方案似乎正常工作,我找不到回答的問題讓我得到了正確的答案。訪問/ SQL Server 2008加入使用像不工作

我正在爲同事進行訪問,儘管未來一旦他可以設置服務器,它可能會在SQL中。我試圖用Like來加入兩個表格,這很容易,除非它不能正常工作。首先,從每個表的例子:

T1

+-------------------------+--------------------------------------------------------------+--------------+ 
|LOCATION_CG_LOC_LEGACY_ID|LOCATION_CODE_DESC           |PI_LOW_SIDE_MW| 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt01    |Autobot Transformer, 800/900 NETWORK, Optimus #1 - 800 NETWORK|5    | 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt02    |Autobot Transformer, 800/900 NETWORK, Optimus #2 - 800 NETWORK|6    | 
+-------------------------+--------------------------------------------------------------+--------------+ 
|55555-Opt03    |Autobot Transformer, 800/900 NETWORK, Optimus #3 - 800 NETWORK|6.5   | 
+-------------------------+--------------------------------------------------------------+--------------+ 

T2

+------+-----------------------------------------+------------+ 
|DIVID |DMT Bank Name       |5 Digit Code| 
+------+-----------------------------------------+------------+ 
|647531|800/900 NETWORK, Optimus #1 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 
|647532|800/900 NETWORK, Optimus #2 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 
|647533|800/900 NETWORK, Optimus #3 - 800 NETWORK|55555  | 
+------+-----------------------------------------+------------+ 

我想喜歡的項目基本上是相結合,這樣我就可以完成我想要的任何查詢。但是現在,我對選擇全部都很滿意。我只需要像物品一樣組合。在T1中,第一列[LOCATION_CG_LOC_LEGACY_ID]是不重複的唯一項目。在T2中,[DIVID]是一個不重複的獨特項目。我試圖查詢它們放在一起使用

SELECT * 
FROM [Data Table 1] INNER JOIN [Data Table 2] ON (([t1].[LOCATION_CODE_DESC] Like [t2].[DMT Bank Name] 
OR [t2].[DMT Bank Name] Like [t1].[LOCATION_CODE_DESC]) AND ([T1].[LOCATION_CG_LOC_LEGACY_ID] Like [t2].[5 Digit Code] or [t2].[5 Digit Code] Like [T1].[LOCATION_CG_LOC_LEGACY_ID])); 

現在,我認爲有與該連接條件下半年的一個問題,但即使只用上半場,我得到的結果爲零。但是,如果我編輯每個表中的中間列,那麼使用該條件的前半部分,它可以很好地工作。換句話說,如果我使列完全匹配,查詢似乎工作,這違背了使用「喜歡」連接開始的整個點。

我還沒有在SQL Server中嘗試過這一點,但我至少需要在Access中使用它作爲概念驗證。任何對你們美麗的女士們,先生們可以給我的幫助,我都會感激不盡,即使它將我指向另一條線索,就像我曾經錯過的一個小球一樣。

最後,我試圖避免使用VBA,如果可能的話。

回答

0

你需要使用SQLSERVER LIKE時添加通配符如%,否則它本質上成爲平等(=)檢查仔細觀察。這裏是通配符查詢:

SELECT * 
FROM t1 
INNER JOIN t2 
ON [t1].[LOCATION_CODE_DESC] Like '%' + [t2].[DMT Bank Name]+ '%' 
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '%' + CONVERT(varchar(50),[t2].[5 Digit Code])+ '%'; 

下面是一個小提琴:http://sqlfiddle.com/#!3/dc2b9/10/0

您還需要轉換爲int某種兼容性的varchar

但請注意,在類似的情況下執行join,特別是使用convert時,會導致大型數據集的性能很差。

編輯:MS訪問

MS Access將是不同的,當你將int轉換成字符串,並使用不同的通配符。我沒有訪問安裝,所以無法測試,但我認爲你的MS Access查詢將如下所示:

SELECT * 
FROM t1 
INNER JOIN t2 
ON [t1].[LOCATION_CODE_DESC] Like '*' & [t2].[DMT Bank Name] & '*' 
AND [T1].[LOCATION_CG_LOC_LEGACY_ID] Like '*' & CStr([t2].[5 Digit Code]) & '*'; 
+0

這似乎非常接近我試圖完成,但它似乎並沒有在訪問工作。 [數據表1] INNER JOIN [數據表2] ON [數據表1]。[LOCATION_CODE_DESC]與'*'和[ ' AND [Data Table 1] [LOCATION_CG_LOC_LEGACY_ID] Like'*'&CVar([Data Table 2]。[5 Digit Code])''' 這是轉換爲access的相同內容。我會在SQL中嘗試它,因爲我發現訪問幾乎總是問題。 – Mellvinbaker

+0

訪問查詢看起來像我認爲應該是什麼,以及我在其他地方發現了什麼,但仍然無法正常工作。然而,SQL查詢完美地工作,我感謝你。我要把這一點記錄下來,因爲Access不夠健壯,建議我的同事使用SQL Server,因爲無論如何它幾乎總是更好的選擇。 – Mellvinbaker

0

試試這個,像格式

--MS SQL 
SELECT * 
FROM T1 
     Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] + '%' 

--MS ACCESS 
SELECT * 
FROM T1 
     Inner Join T2 on T1.[LOCATION_CG_LOC_LEGACY_ID] Like T2.[5 Digit Code] & '%'  
+0

我的錯誤。我在查詢中忽略了'*',因爲它似乎沒有任何區別,但我使用的是「」而不是「」。然而,我只是試了這個,而當我得到一個結果時,我得到了9行而不是3.另外,我怎麼做基於這兩個條件而不是1的連接(IE BOTH t1.c2像t2.c2和t1。 C3像t2.c1) – Mellvinbaker

+0

你的意思是必須滿足2個條件 – Jade