一个 MYSQL 并集 的问题。12个群无人能解!

reniM 发布于 2013/01/17 14:28
阅读 3K+
收藏 14
一个看似很简单的SQL语句(多对多关系的)[ 基于MYSQL]。

我问了我认识的所有计算机专业人士、若干研究生,没人会解。
后来加了12个技术群,其中三个技术群的人,总计二十人讨论了两个多小时,无解。

我觉得这个问题不难,并且有可行的解决方案!需求是这样:


user_name product_id
1            A
2            B
1            B
3            C
4            C
1            D

需求:哪些用户同时购买了 A,C,D?(或者说,同时购买A,C,D的用户都是那些?)

要求有极高的效率 一句sql解决


以下是话题补充:

@reniM:公布参考答案: 6000条数据 0.05秒 SELECT user_name FROM product_buy WHERE product_id in( A, C, D) GROUP BY user_name HAVING COUNT( DISTINCT product_id ) = 2 ; 欢迎大家板砖,杜绝不文明! (2013/01/17 15:43)
加载中
1
宏哥
宏哥

引用来自“StormFour”的答案

交集对MYSQL来说就是蛋疼的事,对其他数据库很容易。

这种问题根本不需要讨论

Kill Mysql , Kill trouble maker.

gen
gen
我是来看宏哥的。
0
reniM
reniM
讨论后 我来揭秘
reniM
reniM
回复 @yuzhouliu : 我是标题党 O(∩_∩)O哈哈哈~
yuzhouliu
yuzhouliu
你是来炫耀的吗
0
StormFour
StormFour

交集对MYSQL来说就是蛋疼的事,对其他数据库很容易。

0
vvtf
vvtf
坐等DBA
0
adamsun
adamsun

select a.user_name from table a, table b, table c 

where a.product_id='A' and b. product_id='B' and c.product_id='C' 

and a.user_id=b.user_id and b.user_id=c.user_id;

或者用全文检索。

d
dream'sky
正解
0
酒逍遥
酒逍遥

SELECT user_name,group_concat(product_id) as product FROM table group by user_name having POSITION('A' IN product)>0 and  POSITION('C'IN product)>0 and POSITION('D' IN product)>0 

应该可以解决需求..效率不太高.

等待楼主解密

0
酒逍遥
酒逍遥

这种问题 纯解决 不难.. 难的是 要考虑额外的扩展..

比如 需要考虑同时购买的产品变更  现在是  A,C,D 以后 可能是A,B,D或者 A,B,C,D

还需要考虑如果该表的数据增大到一定数量级之后原来正常执行的sql语句是否会变成慢查询

真正的难点其实是在这些方面.

0
weipengfei
weipengfei

第一种:select  a.user_name from  ( select user_name from tb where product_id='A' union all  select user_name from tb where product_id='B' union all select user_name from tb where product_id='D' ) a  group by a.user_name having count(a.user_name)=3;


0
池塘仙人
池塘仙人

http://www.oschina.net/question/188389_84050

这个解应该没问题,效率如何就不知道了。

0
星星爷
星星爷
二个<><> 只移动两步 变成  一个<> 

同意楼上的说法

返回顶部
顶部