【发布时间】:2016-11-22 17:53:18
【问题描述】:
我尝试加入三个表以获取必要的数据。他们来了……
*TblComp* *TblCompParent* *tblCompProcesses*
CompID CompBillingID CompID
CompBillingID Capacity1 CompProcessID
Capacity2
所以我想用这三个表做的是......
Select tblCompParent.Capacity1, tblCompParent.Capacity2, CompProcessID
我的问题是...在 tblComp 中有 351 个值 - 所以我首先加入 tblComp 和 tblCompparent 并选择 tblCompparent.capacity1、tblcompparent.capacity2,查询看起来像这样...
SELECT dbo.tblComp.CompID, dbo.tblCompParents.Capacity1, dbo.tblCompParents.Capacity2
FROM dbo.tblCompParents INNER JOIN
dbo.tblComp ON dbo.tblCompParents.CompBillingID = dbo.tblComp.CompBillingID
这很好用,当我尝试加入 tblCompProcess 以提取 CompProcessID 时,我得到了 580 条记录。我不确定我必须在 tblCompprocess 上做什么才能为每个 compID 选择一个 CompProcessID。
看来我必须使用 tblComp,否则我将无法加入 tblCompProcess。
编辑1:
SELECT dbo.tblComp.CompID, dbo.tblCompParents.Capacity1, dbo.tblCompParents.Capacity2, tblCompProcess.compprocessID
FROM dbo.tblCompParents INNER JOIN
dbo.tblComp ON dbo.tblCompParents.CompBillingID = dbo.tblComp.CompBillingID
Inner Join dbo.tblCompprocess on tblCompProcess.CompID = tblComp.CompID
【问题讨论】:
-
您没有显示最终的 sql -- 请显示您正在使用的确切 sql。我们需要看到一个有两个连接的连接,而不仅仅是一个连接。
-
是的,即使您没有将其中的字段包含在选择列表中,您也需要连接所有三个表。
-
除非 tblCompProcesses 对 CompID 具有唯一约束,否则您的某些 CompID 上很可能有多个 CompProcessID。鉴于此,您是否希望获取每个 CompID 的最大或最小 CompProcessID?
-
@AlexKudryashev 我明白了——似乎当我加入第三张桌子时,我得到了奇怪的记录数
-
@user6576015 无论您是否从联接表中选择任何内容都不会影响它对结果集的贡献的行数。它总是加入的。如果任何一对连接条件匹配多于 1 行,则将全部返回,并且总行数将相应增加。因此,如果加入一个表会增加您的行数,那么该表在其他表中有 >= 1 个匹配行的 >1 行。没有其他方法可以发生这种情况。
标签: sql sql-server sql-server-2008 select join