多个连接子查询 SQL Server 2008

Posted

技术标签:

【中文标题】多个连接子查询 SQL Server 2008【英文标题】:Multiple joins subquery SQL Server 2008 【发布时间】:2012-06-14 15:18:43 【问题描述】:

在左侧,您将看到我为一个表设计的设计,在右侧,您将看到下面 SQL 中子查询的结果。我正在尝试在 tblClaims 上的三个字段 patientID,claimsFromDate,claimsThroughDate 上加入子查询,并让外部查询将正确的 tblClaims.ID 与三部分连接相关联。

我得到的错误:

第 3 行,关键字 selectandincorrect 附近的语法不正确 ) 附近的语法,第 12 行

select tblClaims.id, t.primaryCode
from t
(
select patientid, claimsfromdate, claimsthroughDate, primarycode from myTable
union
select patientid, claimsfromDate, claimsthroughDate, secondaryCode from myTable
union
select patientID, claimsfromdate, claimsthroughDate, tertiarycode from myTable

) as t
inner join t on tblclaims.patientid=t.patientid 
and tblclaims.claimsfromdate=t.claimsfromdate
and tblclaims.cllaimsthroughdate=t.claimsfromdate

编辑:内部查询是协调多列字段。它返回 150 万行。 我运行的固定查询返回了 350 万个

select tblClaims.id, t.primarycode from ( select patientid, claimsfromdate, claimsthroughDate, primarycode from myTable ) as t inner join tblclaims on tblclaims.patientid=t.patientid and tblclaims.claimsfromdate=t.claimsfromdate and tblclaims.cllaimsthroughdate=t.claimsfromdate

【问题讨论】:

难怪你没看到 - from 后面有 t,去掉就行了。 【参考方案1】:

试试这个:

select tblClaims.id, t.primarycode 
from 
(
select patientid, claimsfromdate, claimsthroughDate, primarycode from myTable
) as t
inner join tblclaims on tblclaims.patientid=t.patientid 
and tblclaims.claimsfromdate=t.claimsfromdate
and tblclaims.cllaimsthroughdate=t.claimsfromdate

【讨论】:

这会运行,但它返回的行数大约是它的三倍,我认为这不会产生影响,但我会编辑查询以包含整个查询(我想节省混乱)。【参考方案2】:

您是否尝试过使用 Distinct

select DISTINCT tblClaims.id, t.primarycode 
from 
(
    select patientid, claimsfromdate, claimsthroughDate, primarycode from myTable
) as t
inner join tblclaims on tblclaims.patientid=t.patientid 
and tblclaims.claimsfromdate=t.claimsfromdate
and tblclaims.cllaimsthroughdate=t.claimsfromdate

【讨论】:

以上是关于多个连接子查询 SQL Server 2008的主要内容,如果未能解决你的问题,请参考以下文章

如何在SQL Server 2008中放置子查询

SQL Server 2008 R2 子查询分组、求和和计数

SQL Server 2008 - 连接导致性能下降

Microsoft SQL Server 2008 中 JOIN 与 APPLY 的相对效率

如何在 SQL Server 2008 中查看打开的连接/正在运行的查询? [复制]

具有多个或条件的sql server外连接