连接表并返回带有NULL值的2个单独条目

时间:2012-09-06 23:31:44

标签: sql join union

我有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. 表C和D几乎相同,只是表D的列比C少一些 例如,C可能有一个isGood而isSilly但D只有isSilly。 是否可以检索条目,以便在isSilly中使用NULL值拉动D,而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

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用UNION。我相信这可以在SQL Server中使用。

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

答案 1 :(得分: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
相关问题