作者TeemingVoid (TeemingVoid)
看板Database
标题Re: [SQL ] 如何找出共同的项目
时间Mon Jan 16 23:29:09 2012
※ 引述《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
1F:推 yida0926:谢谢,我会再试试看 01/17 16:46