SELECT row_number() OVER ( ORDER BY b.applicationmainCode DESC ) AS rowid , a.applicationdetailid , a.ApplicationMainCode , a.price , a.goodsnum , a.reciveNum , a.sendNum , a.PublicNum , a.Currency , a.equipment , a.equipmentnum , a.requiredate , a.des , c.suppliername , d.goodsname , d.standard , d.unit , d.productid , d.productArea , d.buyarea , e.paymenter , f.workunit , g.classname , b.Ausername , b.AworkUnit , b.applicationMaindate , b.buycode , UseProuduct , ProductCode , TSort , TsortChild , TSortNum , CASE WHEN tnewflag = 1 THEN '新' ELSE '舊' END AS tnewStatus , Tcontent , Tdes , d.price AS GPrice , CASE WHEN b.comfigflag = 0 THEN '是' ELSE '否' END AS comfigstatus , ( SELECT TOP 1 getgoodsdate FROM instock WHERE applicationdetailid = a.applicationdetailid ORDER BY getgoodsdate ) AS getgoodsdate FROM Gr_dt_applicationDetail a LEFT JOIN Gr_db_supplier c ON a.supplierid = c.supplierid LEFT JOIN applicationMain b ON a.applicationmainCode = b.ApplicationMaincode LEFT JOIN goods d ON a.goodsid = d.goodsid --# LEFT JOIN Payment e ON b.paymentid = e.paymentid LEFT JOIN workunit f ON b.UworkUnitId = f.workUnit_Id LEFT JOIN goodstreeclass g ON b.classid = g.classid WHERE a.applicationmainCode = b.ApplicationMaincode AND a.goodsid = d.goodsid --這個地方跟#處有點兒重複了,#處改爲 inner join AND 1 = 1 AND b.passflag >= 1 ORDER BY b.applicationmainCode DESC
多表聯結 sql
SELECT ... FROM a JOIN b ON (a.id = b.aid ) JOIN c ON (a.id = c.aid ) JOIN d ON (c.id = d.cid )
這樣的語句,在數據量大,索引沒維護好,想不慢都難呀。 app