在維持Master/Detail關係時,對Detail作篩選可同時篩到Master |
答題得分者是:kevin2004
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
請教各位前輩:
學姐給小妹一支系統,可以維持Master/Detail關係時,對Detail表格的欄位設篩選條件可同時對Master作篩選﹝即如此Master記錄無合條件的Detail資料時,將不會顯示此Master記錄﹞。這功能實在太神奇了,這個SQL是如何作到的,我想了好久,想不出來。懇請各位前輩指點。謝謝。 |
bruce
中階會員 發表:19 回覆:121 積分:83 註冊:2002-04-16 發送簡訊給我 |
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
Master中沒有Detail的欄位,我要如何將Detail的條件設在master中
==>舉個例子給你 ==>假設Master是課室別,MasterDepartment, ==>Detail是員工,DetailEmployee ==>則Master-SQL如下 select distinct M.* from MasterDepatment M , DetailEmployee D where (M.Dep_Code=D.Dep_Code) and (D.Employee_Name like '%王%') ==>Detail-SQL如下 select * from DetailEmployee where (Dep_Code=:Dep_Code) and ( Employee_Name like '%王%' )
------
Kevin |
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
==>在Master-SQL中別忘了加distinct,否則會有CrossResult
==>這種運算對速度影響很大及資源很耗,能不用,就不要用。除非你的資料規模很小,否則你一定會感受的我在說什麼。 ==>通常這種的作業,因涉及未定數量的篩選欄位,及不知是要對Master或Detail欄位作篩選,再加上AndOrCheckBox,故在取得WhereSQL時就可能三五百行或一兩千行是很難避免。如果User只是設Master-Field篩選或只是設Detail-Field篩選,那很簡單。但如果User設了Detail時,那Master要如何設就要很小心。所以設時要先檢查Detail-Field篩選,再設Master。至於為何要如此作,實在是太久沒作了,我要看看Source才知。 ==>當然,如果你的資料本來就有很強的組織性,那查詢時維持Master-Detail關係是很自然的事,也是很符合直覺的。這時玩這套,就是無法避免之惡,就無法考慮到速度及資源損耗的問題。 ==>我曾寫過一個有四層Master-Detail的文獻資料查詢。此時如果我維持四層MD結構的查詢,那這個GetWhereSQL-Func會寫的很龐大及很難除錯,且會拖慢系統速度。最重要的,是在四層結構下,客戶很難迅速找到他的資料。此時,我是將上兩層關掉,只留最下兩層的主題子題MD作查詢。這是給客戶用的一年後才發展出來的技巧。 ==>這種查詢不好寫。要有耐性。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2007-06-09 15:57:52, 註解 無‧
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
limary
初階會員 發表:41 回覆:109 積分:30 註冊:2007-01-11 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |