-1

私は4つのテーブルを持っており、キーが正しいエントリにマップされる最も効率的な方法でテーブルを返したいと思います。

表Aの列:

[ SVC_PREFIX | SVC_CD | ... ]

表Bの列:

[ SVC_PREFIX | SVC_CD | SVC_ID |... ]

表Cの列:

[ SVC_ID | ... ]

表Dの列:

[ SVC_ID | ... ]

テーブルAは、SVC_PREFIXおよびSVC_CDによってテーブルBにマップされます。テーブルBは、SVC_IDを介してテーブルCおよびDを取得する役割を果たします。テーブルDの列がCよりも少ないことを除いて、テーブルCおよびDはほぼ同じです。 isSillyですが、DにはisSillyしかありません。DがisSillyのNULL値でプルされ、Cが対応するデータを取得するように、エントリを取得することは可能ですか?

次に例を示します。表Aの列:

[ SVC_PREFIX | SVC_CD | anotherData ]
[ 111 | 123 | AAA ]

表Bの列:

[ SVC_PREFIX | SVC_CD | SVC_ID ]
[ 111 | 123 | 007]

表Cの列:

[ SVC_ID | isGood | isHappy ]
[ 007 | Y | Y ]

表Dの列:

[ SVC_ID | isGood ]
[ 007 | Y ]

取得したいデータ:

[ SVC_PREFIX | SVC_CD | anotherData | SVC_ID | isGood | isHappy ]

実際のデータ

[ 111 | 123 | AAA | 007 | Y | Y ]
[ 111 | 123 | AAA | 007 | Y | NULL ]

CとDの両方のテーブルを別々の行として表示したいと思います。

現在、暗黙の結合がありますが、希望する結果が得られません...

SELECT *
FROM A,B,C,D
WHERE A.SVC_PREFIX = B.SVC_PREFIX
AND A.SVC_CD = B.SVC_CD
AND B.SVC_ID = C.SVC_ID
AND B.SVC_ID = D.SVC_ID
AND C.SVC_ID = D.SVC_ID

助けてくれてありがとう!

4

2 に答える 2

1

UNIONを使用できます。これはSQLServerで機能すると思います。

SELECT A.SVC_PREFIX, B.SVC_CD, A.anotherData, CD.SVC_ID, CD.isGood, CD.isHappy  
FROM A
JOIN B ON B.SVC_PREFIX = A.SVC_PREFIX AND B.SVC_CD = A.SVC_CD
JOIN
(
  SELECT SVC_ID, isGood, isHappy
  FROM C

  UNION

  SELECT SVC_ID, isGood, NULL AS isHappy
  FROM D
) AS CD ON CD.SVC_ID = B.SVC_ID
于 2012-09-06T23:50:44.807 に答える
0

JOIN(内部参加)で試してください:

SELECT *
FROM A
JOIN B ON B.SVC_PREFIX = A.SVC_PREFIX
JOIN C ON C.SVC_ID = B.SVC_CD
JOIN D ON D.SVC_ID = C.SVC_CD
于 2012-09-06T23:42:11.100 に答える