2

我是老派,一直使用“+”号来表示外部,但是这个 sql 在 sql server 中不起作用。有人可以帮我将以下 sql 转换为新的“左外连接”格式。

select frdonmst.FRID, 
       fradrmst.adrseq, 
       fax.phone   as fax, 
       phone.phone as phone 
from   frdonmst, 
       fradrmst, 
       frphnmst fax, 
       frphnmst phone 
where  frdonmst.frid = fradrmst.frid 
       and frdonmst.adrseq = fradrmst.adrseq 
       and ( frdonmst.frid = fax.frid(+) 
             and frdonmst.adrseq = fax.adrseq(+) 
             and fax.phtyp(+) = 'FAX1' ) 
       and ( frdonmst.frid = phone.frid(+) 
             and frdonmst.adrseq = phone.adrseq(+) 
             and phone.phtyp(+) = 'D1' ) 
4

2 回答 2

5

我会试一试,但我从未见过以这种身份使用加号。:)

SELECT a.FRID
    , b.adrseq
    , fax.phone AS fax
    , phone.phone AS phone
FROM frdonmst a
JOIN fradrmst b
    ON a.adrseq = b.adrseq
LEFT JOIN frphnmst fax
    ON a.frid = fax.frid
    AND a.adrseq = fax.adrseq
    AND fax.phtyp = 'FAX1'
LEFT JOIN frphnmst phone
    ON a.frid = phone.frid
    AND a.adrseq = phone.adrseq
    AND phone.phtyp = 'D1'

PS刚刚手动输入,我会礼貌地建议使用单词来命名事物。

于 2012-06-22T21:31:17.267 回答
0

我希望这是您正在寻找的:

select 
frdonmst.FRID, 
fradrmst.adrseq, 
faxTable.phone as fax, 
phoneTable.phone as phone 
FROM (((frdonmst LEFT JOIN fradrmst ON frdonmst.adrseq = fradrmst.adrseq and frdonmst.adrseq = fradrmst.adrseq)
                 LEFT JOIN frphnmst AS faxTable ON frdonmst.frid = faxTable.frid AND frdonmst.adrseq = faxTable.adrseq)
                 LEFT JOIN frphnmst AS phoneTable ON frdonmst.frid = phoneTable.frid AND frdonmst.adrseq = phoneTable.adrseq)
WHERE faxTable.phtyp='FAX1' AND phoneTable.phtyp='D1'
于 2012-06-22T21:31:43.333 回答