旧SQL? FROM之后的多个表

时间:2015-03-05 21:09:32

标签: sql sql-server-2008

我正在尝试重写以下由Impromptu在某些部分生成的查询。出于某种原因,我无法在FROM和接下来的嵌套之后绕过多个表。我总是使用“主”表然后加入我需要的任何东西。即选择,左边连接(表格)x = x左边连接(表格)x = x,依此类推。

我和父母一起度过了艰难的时光......在这里。用“普通”查询样式写的是什么样的?非常感谢提前!

select 
    T6."dateofservice"
    , getdate(), -20000 - (1 - convert(float(53),-2) / abs(-2)) / 2
    , T1."pgrp_specialty"
    , T1."pgrp_prov_combo"
    , T2."patsex"
    , T3."restricted"
    , T2."patdob"
    , T2."patdecdate"
    , T2."acctno"
    , T2."patno"
from 
    "acctdemo_t" T3, "transaction_t" T5,
    ("patdemo_t" T2 
     LEFT OUTER JOIN ("provcode_t" T8 
                      LEFT OUTER JOIN "provalt_t" T1 on T8."px" = T1."accesspractice" and T8."provcode" = T1."accessprovidercode") on T2."provcode" = T8."provcode") 
 LEFT OUTER JOIN "insset_t" T4 on T2."acctno" = T4."acctno" and T2."patno" =    T4."patno", "charge_t" T6 
   LEFT OUTER JOIN "poscode_t" T7 on T6."poscode" = T7."poscode"

where 
    T2."patsex" <> 'U' 
    and T7."posid" = '3' 
    and T6."correction" = 'N' 
    and T5."txtype" = 'C' 
    and (T4."defaultset" = 'Y' or 
           (T4."inssetno" = 0 or T4."inssetno" is null) 
         and T4."defaultset" is null) 
    and T6."chgno" = T5."chgno" 
    and T2."patno" = T6."patno" 
    and T2."acctno" = T6."acctno" 
    and T2."acctno" = T3."acctno"

1 个答案:

答案 0 :(得分:1)

使用逗号分隔的多个表编写的SQL隐含INNER JOIN,其中where子句用作join子句。例如,

select * from table1 a, table2 b
where a.id = b.id

与:

相同
select * from table1 a inner join table2 b on a.id = b.id

所以,在你的情况下,这部分:

from "acctdemo_t" T3
, "transaction_t" T5

暗示acctdemo_ttransaction_t之间的内部联接。

而且 - 第三部分:

("patdemo_t" T2 LEFT OUTER JOIN 
    ("provcode_t" T8 LEFT OUTER JOIN "provalt_t" T1 on T8."px" = T1."accesspractice" and T8."provcode" = T1."accessprovidercode") 
        on T2."provcode" = T8."provcode") 

实际上是一个使用自己的子句动态创建的表集,并且基本上充当此连接中的表。也加入了Inner join,因为它添加了一个逗号。

我相信这绝对可以写得更具可读性,并且创建的内联表集对性能不会有好处,但这完全取决于你拥有的记录数。