Re: [SQL ] 如何找出共同的項目

看板Database作者 (TeemingVoid)時間14年前 (2012/01/16 23:29), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《yida0926 (yida)》之銘言: : Hi all: : 不知道標題這樣下是否恰當。 : 目前我的 DB table 存的是: : User Item Value : A I1 2 : A I3 3 : A I5 3 : B I1 2 : B I5 4 : C I3 1 : C I5 3 : User是某個使用者、Item為某項目的標號、value則是一個簡單的數值。 : 我現在想要挑出每兩個user的共同項目資料跟各別數值, : 例如: [A,B]={I1:2:2,I5:3:4} , [B,C]={I5:4:3} , [A,C]={I3:3:1;I5:3:3} : 但我不知道該用甚麼樣的語法來解決效能會比較好, : ... : 現在光parser table找出關係就要10分鐘效率極差, : DBMS: MySQL 我有個類似的案子,銷貨表大概長這樣: create table Sales ( BuyerID varchar(8), ProductID varchar(8), Qty int ) -- 代入原PO的資料為例: insert into Sales values ('A', 'I1', 2), ('A', 'I3', 3), ('A', 'I5', 3), ('B', 'I1', 2), ('B', 'I5', 4), ('C', 'I3', 1), ('C', 'I5', 3) 現在,要找出哪些客戶不約而同買到同一項商品: select L.BuyerID X, R.BuyerID Y, L.ProductID, L.Qty from Sales L join Sales R on L.ProductID = R.ProductID where L.BuyerID <> R.BuyerID order by X, Y 我利用 Self-Join 在銷貨資料表找相同品號,因為一定會找到自己,所以, WHERE 子句將自己排除在外,也才符合「不約而同買到同一項商品」的想法。 還有,這個例子一定要針對 BuyerID 與 ProductID 編製索引,否則就如原PO 耽心的,會有效率的問題。 HTH -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.38.83.75

01/17 16:46, , 1F
謝謝,我會再試試看
01/17 16:46, 1F
文章代碼(AID): #1F5497JX (Database)
文章代碼(AID): #1F5497JX (Database)