我正在尝试从数据库(sql server 2005)中提取结果,该数据库需要4个表: 订户S,会员M,ClaimLines L,ClaimHistoryLines H
查询如下:
select S.SBSB_ID, M.MEME_NAME,
(CASE L.CLCL_ID WHEN '' THEN H.CLCL_ID ELSE L.CLCL_ID END) AS CLAIM_ID
FROM CMC_CDDL_CL_LINE L, CMC_MEME_MEMBER M LEFT OUTER JOIN CMC_CLDH_DEN_HIST H
ON H.MEME_CK = M.MEME_CK, CMC_SBSB_SUBSC S
WHERE
S.SBSB_ID = '120943270' AND
L.MEME_CK = M.MEME_CK AND
M.SBSB_CK = S.SBSB_CK
此查询成功从ClaimLines L表中提取结果行,但不显示History表的结果。我不知道怎么做,任何可以提供帮助的sql专家都会很棒。 -Thanks!
答案 0 :(得分:1)
CMC_CDDL_CL_LINE L,CMC_MEME_MEMBER M LEFT OUTER JOIN CMC_CLDH_DEN_HIST H
不要将过时的隐含连接语法与左连接混合使用。他们在一起打得不好。使用正确的ANSII标准连接语法。事实上,完全停止使用过时的语法。
答案 1 :(得分:0)
这对我来说是一个非常愚蠢的错误。我忽略了使用UNION来解决我的问题,并允许我从两个地方拉到一个结果集而不会创建大量的重复行。很高兴有人指出使用ANSII标准编写sql的正确方法。
select S.SBSB_ID, M.MEME_NAME,
L.CLCL_ID AS CLAIM_ID
FROM
CMC_SBSB_SUBSC S INNER JOIN CMC_MEME_MEMBER M ON S.SBSB_CK = M.SBSB_CK
INNER JOIN CMC_CDDL_CL_LINE L ON L.MEME_CK = M.MEME_CK
WHERE
S.SBSB_ID = '120943270'
UNION
select S.SBSB_ID, M.MEME_NAME,
H.CLCL_ID AS CLAIM_ID
FROM
CMC_SBSB_SUBSC S INNER JOIN CMC_MEME_MEMBER M ON S.SBSB_CK = M.SBSB_CK
INNER JOIN CMC_CLDH_DEN_HIST H ON H.MEME_CK = M.MEME_CK
WHERE
S.SBSB_ID = '120943270'