2012-09-06 27 views
-1

我有4个表,并希望以最有效的方式返回表中的键映射到其正确的条目。连接表并返回2个单独的条目与NULL值

表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例如,C可能有一个isGood而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 

感谢您的帮助!

+0

注意:数据库有密钥。和强大的类型。看起来你可以加入A和B,并且加入B&C和B&D(或C&D)。 – wildplasser

+0

这个记录来自'[111 | 123 | AAA | 007 | Y | NULL]'?我的意思是为什么有'null'? –

+0

@JohnWoo从技术上说,这个记录不存在。然而,null表示它来自表D,它与C的数据基本上是相同的数据,除了它没有,在这个例子中,这是很好的 – bigbitecode

回答

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 
+0

太棒了。我认为那样做了。最有帮助的是JOIN(*另一个查询在这里*)和NULL AS命令,默认列为NULL。 – bigbitecode

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 
+0

我试过这个查询,但它似乎并没有拉空值。 – bigbitecode