2013-07-26 104 views
0

我試圖在MS Access中執行以下SQL。是否有可能在JOIN中有子查詢過濾器

基本上TAB3用作轉換表

SELECT * 
FROM TAB1 T1 INNER JOIN TAB2 T2 
ON T1.MemNo = T2.MemID 
AND (T1.SID = (SELECT x.Col1 FROM TAB3 x WHERE x.Col2 = T2.SVID)) 

但它給了我一個語法錯誤

可能是什麼可能的問題

更新:

TAB1 

MemNo SID 

116537 S110 
116537 D011 
575788 D012 
214438 S110 
434675 D114 
214438 D011 
208368 D012 
208368 S110 

TAB2 

MemID SVID 

116537 110 
116537 11 
214438 11 
434675 114 
214438 110 
575788 12 
208368 12 
208368 110 


TAB3 

Col1 Col2 

D011 11 
S110 110 
D114 114 
D012 12 

感謝

+1

是否語法錯誤指定的任何信息 - 錯誤號碼等?也許其中一個數字列是文本而不是數字? – AngelWarrior

回答

2

爲什麼不子查詢移動到您的查詢的WHERE語句?

SELECT * 
FROM TAB1 T1 
INNER JOIN TAB2 T2 ON T1.MemNo = T2.MemID 
WHERE EXISTS (SELECT 1 
       FROM TAB3 x 
       WHERE x.Col2 = T2.SVID 
       AND x.Col1 = T1.SID) 

嘗試使用LEFT以下連接:

SELECT * 
FROM TAB1 T1 
LEFT JOIN TAB2 T2 ON T1.MemNo = T2.MemID 
WHERE EXISTS (SELECT 1 
       FROM TAB3 x 
       WHERE x.Col2 = COALESCE(T2.SVID, x.Col2) 
       AND x.Col1 = T1.SID) 
+0

欣賞您的回覆。以上解決方案執行時沒有語法錯誤,但沒有結果。 – SMPH

+0

@Manthree Peiris使用您的示例數據我確實得到了結果:[鏈接](http://www.sqlfiddle.com/#!3/18771/1) – Sam

+0

對不起,山姆,你說得對。我的桌子上有我的列交換。謝謝 – SMPH

2

嘗試用存在:

SELECT * 
FROM TAB1 T1 INNER JOIN TAB2 T2 
ON T1.MemNo = T2.MemID 
WHERE EXISTS (SELECT * FROM TAB3 x WHERE x.Col2 = T2.SVID AND x.Col1 = T1.SID) 
+0

感謝您的回覆。上面的查詢給出相同的語法錯誤,雖然 – SMPH

+0

感謝gzaxx,這也工作後用'WHERE'替換'AND'。讚賞 – SMPH

0
SELECT * 
FROM TAB1 T1 INNER JOIN TAB2 T2 
ON T1.MemNo = T2.MemID 
AND (T1.SID in (SELECT x.Col1 FROM TAB3 x WHERE x.Col2 = T2.SVID)) 
+0

@Raveen,謝謝你的迴應。以上查詢給出相同的語法錯誤 – SMPH

相關問題