2017-07-24 22 views
0

任何人都可以幫助我獲得此查詢的工作方式或替代方法做同樣的事情嗎?每個表都有一個名爲'Field'的主鍵字段,每個其他字段都不相同,但是我想加入這些字段並將每個表的'value'行中的所有列全部返回,其中Field ='value' 。SQL如何獲得FULL OUTER JOIN,其中主鍵/字段是所有表中的特定值

查詢:

SELECT A.*, B.*, C.* 
FROM 
(
(SELECT * FROM Table1 WHERE Field = 'value') A 
FULL OUTER JOIN 
(SELECT * FROM Table2 WHERE Field = 'value') B on A.Field = B.Field 
FULL OUTER JOIN 
(SELECT * FROM Table3 WHERE Field = 'value') C on A.Field = C.Field 
); 

表:

表1

Field----------Col1------------Col2 
value------------1---------------2 

表2

Field----------Col3------------Col4 
value------------3---------------4 

表3

Field----------Col5------------Col6 
value------------5---------------6 

所需的結果:

Field------Col1------Col2------Col3------Col4------Col5------Col6 
value-------1------------2----------3----------4-----------5----------6 

我使用C#,任何其他查詢工作正常,所以我敢肯定這是一個語法問題,或者什麼的。該錯誤消息我得到的是

「IErrorInfo.GetDescription失敗E_FAIL(0x80004005的)」

我想感謝所有幫助

+0

您使用的數據庫是? –

+0

我的C#程序與MS Access數據庫交互 – ghostcoder

+0

訪問不明確支持完整的外連接 – HLGEM

回答

1

你有FROM子句中一組額外的括號的。我會建議:

SELECT A.*, B.*, C.* 
FROM (SELECT * FROM Table1 WHERE Field = 'value' 
    ) A FULL OUTER JOIN 
    (SELECT * FROM Table2 WHERE Field = 'value' 
    ) B 
    ON A.Field = B.Field FULL OUTER JOIN 
    (SELECT * FROM Table3 WHERE Field = 'value' 
    ) C 
    ON C.Field = COALESCE(A.Field, B.Field) 

基本上你想做一個「外部交叉連接」,但這不是一個SQL操作符。

您可能還短語這樣的查詢:

select a.*, b.*, c.* 
from (select 'value' as field) x left join 
    a 
    on a.field = x.field left join 
    b 
    on b.field = x.field left join 
    c 
    on c.field = x.field; 

注意一些數據庫需要爲第一子查詢FROM條款,所以語法可能會根據數據庫上略有不同。

+0

感謝您的建議戈登我現在給他們一個鏡頭! – ghostcoder

+0

我剛發現,正如HLGEM所指出的,Access不支持完整的外連接 – ghostcoder