我正在尝试重写以下由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"
答案 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_t
和transaction_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,因为它添加了一个逗号。
我相信这绝对可以写得更具可读性,并且创建的内联表集对性能不会有好处,但这完全取决于你拥有的记录数。