線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1487
推到 Plurk!
推到 Facebook!

在維持Master/Detail關係時,對Detail作篩選可同時篩到Master

答題得分者是:kevin2004
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-07 18:24:22 IP:61.219.xxx.xxx 訂閱
請教各位前輩:
學姐給小妹一支系統,可以維持Master/Detail關係時,對Detail表格的欄位設篩選條件可同時對Master作篩選﹝即如此Master記錄無合條件的Detail資料時,將不會顯示此Master記錄﹞。這功能實在太神奇了,這個SQL是如何作到的,我想了好久,想不出來。懇請各位前輩指點。謝謝。
編輯記錄
limary 重新編輯於 2007-06-07 18:24:59, 註解 無‧
limary 重新編輯於 2007-06-07 18:33:55, 註解 無‧
limary 重新編輯於 2007-06-07 18:34:22, 註解 無‧
bruce
中階會員


發表:19
回覆:121
積分:83
註冊:2002-04-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-08 10:12:53 IP:211.21.xxx.xxx 訂閱
detial資料是由master進行過濾的,所以只要把顯示detail的條件設給master即可。
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-09 07:48:54 IP:61.219.xxx.xxx 訂閱
我想了好久,不知要如何作這個,Master中沒有Detail的欄位,我要如何將Detail的條件設在master中?

請再指點。謝謝。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-09 15:31:05 IP:61.219.xxx.xxx 訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-06-09 15:51:59 IP:61.219.xxx.xxx 訂閱
    ==>在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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-06-09 15:56:09 IP:61.219.xxx.xxx 訂閱
    ==>有時某些資料庫如PostgreSQL等很挑剔的產品,對有這類Cross-Join運算時會很講究要訴明欄位歸屬,
如Where (Dep_Code....等就必需寫成 Where (D.Dep_Code=...才能執行。這也是要注意的地方。
------
Kevin
limary
初階會員


發表:41
回覆:109
積分:30
註冊:2007-01-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-06-09 18:38:03 IP:61.219.xxx.xxx 訂閱
感謝,感謝。前輩寫的如此詳盡,小妹感激萬分。

試成功了,謝謝。

謝謝前輩提攜與分享。
系統時間:2024-05-18 7:03:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!