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 は、"name" の下に PAUL と BOB を返します。しかし 3 は結合されますが、何も返されません。次に、C にクエリを実行します。

私の考えはそれをループすることですが、もっと良い考えがあるかどうか知りたいです。そして、私はASPにまったく慣れていないので、タグ付けが間違っている場合は...助けてください。ありがとうございました

4

3 に答える 3

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 に答える
0

すべてのデータベースが同じサーバー上にある (そしてログインですべてのデータベースにアクセスできる) 限り、JOIN DatabaseC.dbo.SomeTabledboスキーマ名です。

于 2012-07-04T00:02:57.953 に答える
0

データベースが同じサーバー上にある場合は、完全修飾名を使用して、2 つのデータベース間でテーブルを結合できます。an の構文outer joinが無効な t-sql であることに注意してください。必要なタイプを指定する必要がありますouter join... a left joinright 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 が 1 つのテーブルにしか名前を持たない場合は、出力が少し読みやすくなる可能性があります。

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 に答える