一个看似很简单的SQL语句(多对多关系的)[ 基于MYSQL]。
表结构:
user_name product_id
1 A
2 B
1 B
3 C
4 C
1 D
需求:哪些用户同时购买了 A,C,D?(或者说,同时购买A,C,D的用户都是那些?)
要求有极高的效率 一句sql解决
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这个需求,用PostgreSQL的聚合查询可以非常简单的实现,而且效率非常高,比多表关联效率高太多了。
postgres=# create table t(id int, info text);
CREATE TABLE
postgres=# insert into t values (1,'a'),(1,'b'),(1,'c'),(1,'d'),(2,'a'),(2,'c'),(3,'d');
INSERT 0 7
postgres=# select id from t group by id having array_agg(info) @> array['a','c'];
id
----
1
2
(2 rows)
`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;`
或者用全文检索。