【发布时间】:2012-04-05 02:57:32
【问题描述】:
我很难进行这种转换。那些嵌套的 OUTER 连接对我来说是第一次。
原始 Informix 查询:
from ttdpur401105 tdpur401
, ttdpur400105 tdpur400
-- Problem is here
, outer tarpur002105 arpur002
, outer (ttdpur402105 tdpur402, outer (ttisfc001105 tisfc001 , outer ttcibd001105 tcibd001a ))
, outer ttcibd001105 tcibd001
-- Problem is here
WHERE tdpur401.t_otbp = ' WD005'
and ((tdpur401.t_oltp=1 AND tdpur401.t_qibo <>0) OR(tdpur401.t_oltp=4 AND tdpur401.t_qibo = 0 AND tdpur401.t_qidl<>tdpur401.t_qoor))
and tdpur401.t_fire <> 1
and tdpur401.t_orno = tdpur400.t_orno
and (tdpur400.t_hdst<>25 AND tdpur400.t_hdst<>30 AND tdpur400.t_hdst<>40)
and arpur002.t_orno = tdpur401.t_orno
and arpur002.t_pono = tdpur401.t_pono
and tdpur402.t_orno = tdpur401.t_orno
and tdpur402.t_pono = tdpur402.t_pono
and tisfc001.t_pdno = tdpur402.t_pdno
and tcibd001.t_item = tdpur401.t_item
and tcibd001a.t_item = tisfc001.t_mitm
and (tdpur401.t_orno[1,3]='111' or tdpur401.t_orno[1,4]='1126' )
尝试 T-SQL 查询:
from ttdpur401105 as tdpur401
inner join ttdpur400105 as tdpur400 on tdpur401.t_orno = tdpur400.t_orno
left outer join tarpur002105 as arpur002 on arpur002.t_orno = tdpur401.t_orno and arpur002.t_pono = tdpur401.t_pono
left outer join (ttdpur402105 as tdpur402
left outer join (ttisfc001105 as tisfc001
left outer join ttcibd001105 as tcibd001a on tcibd001a.t_item = tisfc001.t_mitm
and tisfc001.t_pdno = tdpur402.t_pdno) on tdpur402.t_orno = tdpur401.t_orno)
left outer join ttcibd001105 as tcibd001 on tcibd001.t_item = tdpur401.t_item
WHERE tdpur401.t_otbp = ' WD005'
and ((tdpur401.t_oltp=1 AND tdpur401.t_qibo <>0) OR(tdpur401.t_oltp=4 AND tdpur401.t_qibo = 0 AND tdpur401.t_qidl<>tdpur401.t_qoor))
and tdpur401.t_fire <> 1
and (tdpur400.t_hdst<>25 AND tdpur400.t_hdst<>30 AND tdpur400.t_hdst<>40)
and tdpur402.t_pono = tdpur402.t_pono
and substring(tdpur401.t_orno,1,3)='111' or substring(tdpur401.t_orno, 1,4)='1126'
【问题讨论】:
标签: sql-server tsql join informix outer-join