回覆列表
-
1 # 使用者992003956934
-
2 # 未來可期_487
樓主使用的是子查詢,子查詢侷限性較大,只能顯示第一張表的欄位。你可以這樣寫
SELECT * FROM biz.coursecomment a,so.sodetail b,so.somaster c
where a.sono=b.sono and b.sono=c.sono and c.TeacherNO="100199" and b.IsStudentComment="1" AND IsTeacherComment="1" and a.ToCustomerNO="100199"
這樣寫就避免了各種的子查詢。當然,你還可以寫成join的形式。join的層次更分明,程式碼如下:
SELECT * FROM biz.coursecomment a
join so.sodetail b
on a.sono=b.sono
join so.somaster c
on c.sono=b.sono
where c.TeacherNO="100199" and b.IsStudentComment="1" AND IsTeacherComment="1" and a.ToCustomerNO="100199"
如果不懂,可以追問
1.首先是最佳化,在絕大多數的場景下,多表查詢的都是可以被單表聯查替換掉,只有少數諸如資料查詢這樣的場景下多表查詢才是必要的,而在其他場景下,你只是需要幾條資料做關聯,使用全表之間關聯就顯得浪費了.
2. 解耦合,使用單表查詢後,更有利於解耦合,尤其是在現在orm橫行的情況下,你是不知道你的聯查orm給你搞成了什麼樣,你是很難直接最佳化,尤其是在龐大資料下,超過三個表以上的關聯下,你的sql效率就變得低效,只有考慮新增索引之類的最佳化方式.而這個是需要dba的支援.
3.從2引申出來,那就是負載的問題,一旦引入複製,分表分庫後,你的的多表聯查就成為橫向分割最大的負擔.這些東西需要手工去寫複雜的關聯器.而採用單表分查的,拆分則容易的多.