1

我正在使用 SQL Server 2008 并尝试连接来自 4 个不同表的数据,这些表是相关的,这样第 2 个表是第 1 个表的子表,第 3 和第 4 个表是第 2 个表的两个子表,我正在使用以下语句输出结果,但不是得到 9 条不同的记录(5 条来自 CR 表,4 条来自 CX 表),我得到了 20 条记录,其中来自第 3 和第 4 表的数据是重复的。

如果我省略对表 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 新手,所以如果我难以理解您的回复,请耐心等待,并提前感谢您抽出宝贵时间查看此内容。

4

1 回答 1

0

如果我理解正确,您希望 C0 与 CR 连接,然后 c0 与 CX 连接(这样您将获得 5 行和 4 行)

但是您从一个联接中获得 5 行,从另一个联接中获得 4 行。DBMS 不知道如何连接这两个连接并进行一点交叉连接(每 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 行,(如果你有一个 CX 或一个 CR,你必须做一个更好的加入)

于 2013-05-06T08:18:14.747 回答