多个连接子查询 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 行,关键字 select
and
incorrect 附近的语法不正确 ) 附近的语法,第 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 R2 子查询分组、求和和计数
Microsoft SQL Server 2008 中 JOIN 与 APPLY 的相对效率