任何人都可以帮助我使这个查询工作或替代做同样的事情吗?每个表都有一个名为' 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)"
而失败
我很感激任何帮助
答案 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
子句,因此语法可能会因数据库而略有不同。