0

所以假设有表 A、B 和 C

A 和 B 来自数据库 AAA,C 来自数据库 BBB 据我所知,我无法连接来自不同数据库的表。

所以我想加入A和B,如果没有返回,我想从C表中查询。

A_ID    NAME        B_ID  NAME      C_ID   NAME
------------------------------------------------
1       Paul        1     NULL      1      NULL
2       NULL        2     BOB       2      NULL
3       NULL        3     NULL      3      PETER

例如,

select * from A outer join B on A_ID= B_ID

1 和 2 将返回“名称”下的 PAUL 和 BOB。但是 3 会加入,但什么都不会返回。然后我想查询C。

我的想法是循环它,但我想知道是否有更好的想法。而且我对 ASP 完全陌生,所以如果我标记错误...请帮忙。谢谢

4

3 回答 3

0

只要所有数据库都在同一台服务器上(并且您的登录名可以访问所有数据库),您就可以,架构名称JOIN DatabaseC.dbo.SomeTable在哪里。dbo

于 2012-07-04T00:02:57.953 回答
0

如果您的数据库在同一台服务器上,您可以使用完全限定名称来连接两个数据库中的表。请注意,您的 an 语法outer join是无效的 t-sql。你需要指定outer join你想要什么类型... a left join, right join, 等等。

SELECT      *
FROM        A
LEFT JOIN   B on A.A_ID = B.B_ID
LEFT JOIN   [BBB].[dbo].C c on B.B_ID = c.C_ID

一条CASE语句可能会使您的输出更具可读性,但如果给定 ID 的多个表中存在一个名称,它就不起作用(好吧,它会起作用,但您会丢失一些数据)。但是,如果一个 ID 只在一个表中具有名称,那么它可能会使您的输出更具可读性。

SELECT      A.A_ID,
            CASE WHEN A.[Name] IS NOT NULL THEN A.[Name]
                 WHEN B.[Name] IS NOT NULL THEN B.[Name]
                 ELSE c.[Name]
            END
FROM        A
LEFT JOIN   B on A.A_ID = B.B_ID
LEFT JOIN   [BBB].[dbo].C c on B.B_ID = c.C_ID

如果您的数据库在不同的服务器上,那么您仍然可以完成这项工作,但您需要设置链接服务器,这有点困难。

于 2012-07-04T00:07:31.750 回答
0
SELECT  ID,
        Name = CASE temp.ID
                    WHEN NULL THEN  (SELECT Name FROM C WHERE C_ID = temp.ID)
                    ELSE temp.ID
               END
  FROM  (
            SELECT  A.ID,
                    Name = ISNULL(A.Name, B.Name)
              FROM  A 
                    OUTER JOIN B on A_ID = B_ID  
        ) temp
于 2012-07-03T23:43:04.250 回答