2013-05-06 55 views
1

我正在使用SQL Server 2008并试图从4个不同的表中加入数据,其中表是相关的,这样第二个表就是第一个和第三个孩子&第四个表是第二个的两个孩子,我正在使用以下语句输出结果,而不是获取9个不同的记录(5个来自CR表,4个来自CX表)我得到20个记录,其中来自第3个第3个表的数据被复制。SQL INNER JOIN在输出上复制数据?

如果我省略对表CX的引用,我会得到所需的5个结果,省略对CR的引用会给出所需的4个结果,但是我需要结合这两个表的9个结果,而不是我得到的20个记录。我会张贴截图,但由于声誉抱歉无法。

SELECT 
     LS.SITECODE, 
     ep.EP_KEY, 
     C0.LEASEID, 
     C0.SDATE AS LeaseStart, 
     C0.EDATE AS LeaseExpiry, 
     CR.EFFDATE AS RenewalDate, 
     CX.SDATE AS ReviewDate  
    FROM LS 
    INNER JOIN FMEP AS ep ON LS.SITECODE = ep.SITECODE 
    INNER JOIN C0 ON ep.EP_KEY = C0.EP_KEY 
    INNER JOIN CR ON C0.LEASEID = CR.LEASEID 
    INNER JOIN CX ON C0.LEASEID = CX.LEASEID           
    WHERE ls.SITECODE = 2121 

找遍周围的但是我明明没有使用正确的搜索字词的解决方案的最后几个小时,由于我缺乏与SQL熟悉的。我是SQL新手,如果我很难理解您的回复,请提前感谢您抽出宝贵时间阅读本文,请耐心等待。

+6

例如数据,预期输出.... – 2013-05-06 07:00:46

+1

您可以使用[ SQL小提琴](http://sqlfiddle.com/#!3)添加一些数据示例和表模式。 – Yaroslav 2013-05-06 07:05:50

+0

鉴于CR有5个leaseid值,CX有4个leaseid值,根据您对省略连接的描述;并且它们是内连接的,我不明白为什么你期望结果中有9行? – 2013-05-06 07:12:36

回答

0

如果我理解你的权利,你想C0与CR 加入,然后C0与CX(所以你得到5个4行)

但你从另一个得到一个5行的加入,4行加入加入。数据库管理系统不知道如何连接这两个连接,并做一个小的交叉连接(每4行与其他5行)导致20行(如果我以正确的方式理解你的描述)

这里是一个你会得到你想要的9排。

SELECT 
     LS.SITECODE, 
     ep.EP_KEY, 
     C0.LEASEID, 
     C0.SDATE AS LeaseStart, 
     C0.EDATE AS LeaseExpiry, 
     CR.EFFDATE AS RenewalDate, 
     'CR' 
    FROM LS 
    INNER JOIN FMEP AS ep ON LS.SITECODE = ep.SITECODE 
    INNER JOIN C0 ON ep.EP_KEY = C0.EP_KEY 
    INNER JOIN CR ON C0.LEASEID = CR.LEASEID 
    WHERE ls.SITECODE = 2121 
UNION 
SELECT 
     LS.SITECODE, 
     ep.EP_KEY, 
     C0.LEASEID, 
     C0.SDATE, 
     C0.EDATE, 
     CX.SDATE 
     'CX' 
    FROM LS 
    INNER JOIN FMEP AS ep ON LS.SITECODE = ep.SITECODE 
    INNER JOIN C0 ON ep.EP_KEY = C0.EP_KEY 
    INNER JOIN CX ON C0.LEASEID = CX.LEASEID  
    WHERE ls.SITECODE = 2121 

,但如果你只是想一次C0行,(与eather的CX或CR,你必须做一个更好的连接)