我正在使用SQL Server 2008并尝试从表中相关的4个不同表中连接数据,以便第2个表是第1个和第3个表的子表。第4个表是第2个孩子,我使用以下语句输出结果,而不是获得9个不同的记录(5个来自CR表,4个来自CX表)我得到20个记录,其中数据来自3rd& ;第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的新手,所以如果我很难理解你的回答,请耐心等待,并提前感谢您抽出时间来研究这个问题。
答案 0 :(得分: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你必须做一个更好的连接)