全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1238
推到 Plurk!
推到 Facebook!

請教SQL指令如何下?

尚未結案
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-05 15:35:30 IP:203.204.xxx.xxx 未訂閱
小弟有二個資料表關係如上圖,我想下一個SQL(或一個以上)的SQL指令,取出在Master資料表當中的Item_Id,條件是所對應的Detail資料表,當中的SubItem_Id不「完全」相等。 以上圖來說,Item_Id=5的資料在Master有二筆,相對應的SubItem_Id=11,12,13都一模一樣,因此只要Select出一筆的Item_Id=5,另外,Item_Id=8也有二筆,但相對應的SubItem_Id有20,21以及20,21,22,筆數不同、內容也不同,因此要Select出二筆的Item_Id=8。 Result: Item_Id 5 8 8 目前我的作法是全部Query出來,透過變數儲存Detail當中的SubItem_Id,把同一個Item_Id的SubItem_Id全部組合起來,再個別去比對相同Item_Id的SubItem_Id,降子在資料量大的時候變得相當慢,不知道是否有其他作法?或是可以從SQL指令上著手?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-05 16:59:25 IP:210.65.xxx.xxx 未訂閱
Hi:    Mecer,冒昧請教一下,請問你的 Database 種類與版本為何 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Mecer
初階會員


發表:15
回覆:30
積分:29
註冊:2002-10-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-06 10:12:59 IP:211.22.xxx.xxx 未訂閱
引言: Hi: Mecer,冒昧請教一下,請問你的 Database 種類與版本為何 -------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 -------------------------------- < face="Verdana, Arial, Helvetica"> Hi, 我用的資料庫是SQL Server 2000 ~~
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-06 10:13:18 IP:210.65.xxx.xxx 未訂閱
Hi:    Oracle 語法如下,你可以試試
select  distinct
        0 id,
        m0.item_id,
        count(distinct d0.subitem_id)
from    test_detail d0,
        test_master m0
where   m0.id = d0.master_id
group   by
        m0.id,
        m0.item_id
having  count(distinct d0.subitem_id) = 
       (select count(distinct d1.subitem_id)
        from    test_detail d1,
                test_master m1
        where   m1.id = d1.master_id
        and     m1.item_id = m0.item_id
        group by
                m1.item_id)
union all
select  distinct
        m0.id,
        m0.item_id,
        count(distinct d0.subitem_id)
from    test_detail d0,
        test_master m0
where   m0.id = d0.master_id
group   by
        m0.id,
        m0.item_id
having  count(distinct d0.subitem_id) != 
       (select count(distinct d1.subitem_id)
        from    test_detail d1,
                test_master m1
        where   m1.id = d1.master_id
        and     m1.item_id = m0.item_id
        group by
                m1.item_id)
-------------------------------- 小弟才疏學淺,若有謬誤請不吝指教 --------------------------------
------
Fishman
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-25 14:37:55 IP:210.65.xxx.xxx 未訂閱
Hi:
你可以在 Database 中寫一個 Function,傳入值為 Master 之 id 值,回傳值為該 id 之 Subitem_ID 之字串值
例如傳入值為 1 則回傳值為 111213,亦即將 Subitem_ID 轉會為文字後相加(須注意排序問題)
    傳入值為 2 則回傳值為 111213
    傳入值為 3 則回傳值為 2021
    傳入值為 4 則回傳值為 202122        
再於 SQL Command 中
select  distinct
        item_id,
        get_subitem_id_str(id) as subitem_id_str
from    master    希望對你幫助,若有問題,請再告知
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-26 20:48:05 IP:61.70.xxx.xxx 未訂閱
另一種作法,不知是不是你要的 SELECT Temp.Item_ID, Temp.筆數 FROM ( SELECT Master.Item_ID, Detail.SubItem_ID, Count(Detail.Master_ID) AS 筆數 FROM Master INNER JOIN Detail ON Master.ID=Detail.Master_ID GROUP BY Master.Item_ID, Detail.SubItem_ID) as Temp    GROUP BY Temp.Item_ID, Temp.筆數;
系統時間:2024-11-25 16:44:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!