看板 Database 關於我們 聯絡資訊
※ 引述《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
yida0926:謝謝,我會再試試看 01/17 16:46