Re: [SQL ] 如何找出共同的項目
※ 引述《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
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):