SELECT /*+index(query)*/ WD.ARTICLECODE,WIRETIME,INTIME,S.DESCRIPTION SOURCENAME,C.DESCRIPTION CLASSNAME, WD.FILELENGTH,TITLE,CONTENTDATA,LASTUSEDBY,LASTUSEDAT,PRIORITY, REMARK, WA.ALBUM, WT.WIDTH, WT.HEIGHT, WD.FILEPATH + WD.FILENAME FILEPATH, C.Description Class,d.Description Type,s.description as source,wd.sourcecode,wd.wireclass,wd.caption,wd.articlestatus,wd.filepath ori_filepath,wd.filename,wd.wiredatatype, wt.byline,wt.bylinetitle,wt.captionwriter,wt.city,wt.copyrightnotice,wt.countryname,wt.keywords,wt.specialinstructions,wt.provincestate,wt.source as photosource,wt.originaltranref,wt.objectname,wt.credit FROM WIREDATA WD left outer join SOURCE S on WD.SOURCECODE = S.SOURCECODE and WD.SOURCECODE = S.SOURCECODE inner join WIREALBUM WA on WD.ARTICLECODE = WA.ARTICLECODE inner join WIRETHUMB WT on WD.ARTICLECODE = WT.ARTICLECODE left outer join WireClassMap wm on WD.SOURCECODE = wm.SOURCECODE AND WD.TYPECODE = WM.TYPECODE AND WD.WIRECLASS = WM.WIRECLASS left outer join CLASSIFICATION C on WM.CLASSCODE = C.CLASSCODE left outer join wiretype d on WM.TypeCode = d.TypeCode WHERE WD.ARTICLECODE IN ('AFP_P0002002091718074455');
这个SQL 是从oralce 上 转过来的。 oralce 是支持这种多次连接的。
除了用临时表,MSSQL就没有其它语法支持这样的查询吗?有个产品要从oralce 迁到 MSSQL 2K , 搞了几天,发现不少在oralce上可以跑的SQL,在MSSQL上有限制。
:( 也许是我对MSSQL 不甚了解吧。
SQL太臃肿了.ah.ah.....
FROM WIREDATA WD left outer join SOURCE S on WD.SOURCECODE = S.SOURCECODE and WD.SOURCECODE = S.SOURCECODE
inner join WIREALBUM WA on WD.ARTICLECODE = WA.ARTICLECODE
inner join WIRETHUMB WT on WD.ARTICLECODE = WT.ARTICLECODE
left outer join WireClassMap wm on WD.SOURCECODE = wm.SOURCECODE AND WD.TYPECODE = WM.TYPECODE AND WD.WIRECLASS = WM.WIRECLASS
left outer join CLASSIFICATION C on WM.CLASSCODE = C.CLASSCODE
left outer join wiretype d on WM.TypeCode = d.TypeCode
WHERE WD.ARTICLECODE IN ('AFP_P0002002091718074455');
MSSQL的语法器分析也太差了。
但left outer join的SQL-99标准的写法会一直支持下去。至于外连接,SQL Server要比Oracle灵活而且规范。
Oracle不能以两个或两个以上的表做为主表,但是SQL Server可以。
而且SQL Server有全连接,但是Oracle没有,在Oracle中如果想实现全连接的功能的话,只有先左连再右连,最后再union!BTW:Oracle自创出来的(+)做为外连接符号,一点都不和标准同步。
Oracle还有不少东东和SQL SERVER的不同..学习中……