SQL如何获取FULL OUTER JOIN,其中主键/字段是所有表中的特定值

时间:2017-07-24 14:19:34

标签: c# sql ms-access

任何人都可以帮助我使这个查询工作或替代做同样的事情吗?每个表都有一个名为' Field'的主键字段,其他每个字段都不同,但我想加入这些字段并返回“'值”中的所有列。每个表的行都在一起,其中Field =' value'。

查询:

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)"

而失败

我很感激任何帮助

1 个答案:

答案 0 :(得分:1)

FROM子句中有一组额外的parens。我建议:

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子句,因此语法可能会因数据库而略有不同。