我的数据库中有两个表。两者都有大约100万条记录。我的第一个表uph包含订单的详细信息,另一个表urs包含客户的详细信息。它们的结构是:
mysql> desc uph;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| uid | int(11) | NO | | NULL | |
| order_from | varchar(255) | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> desc usr;
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| uid | int(11) | NO | PRI | NULL | auto_increment |
| profile | char(10) | NO | | NULL | |
+---------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
两个表都有如下数据:
mysql> select * from usr;
+-----+----------+
| uid | profile |
+-----+----------+
| 1 | in-store |
| 2 | ecom |
| 3 | ecom |
| 4 | in-store |
| 5 | ecom |
+-----+----------+
4 rows in set (0.00 sec)
mysql> select * from uph;
+----+-----+------------+
| id | uid | order_from |
+----+-----+------------+
| 1 | 1 | in-store |
| 2 | 2 | ecom |
| 3 | 1 | ecom |
| 4 | 4 | in-store |
+----+-----+------------+
4 rows in set (0.00 sec)
现在,我想找到那些用户有配置文件“ecom”,如果他们做了任何购买然后订单从应该只有“ecom”。如果没有购买任何只有个人资料,仍将被视为“ecom”用户。
如果任何用户从ecom和店内购买了这两种产品,这些产品将从结果中删除。这意味着用户不应该与商店有任何关系。
因此,在查询的输出中,我们将得到如下结果:
+----+
| uid |
+-----+
| 2 |
| 3 |
| 5 |
+-----+
因为两个表都包含大量数据,所以我只限于用户子查询。请建议如何不使用子查询。
1条答案
按热度按时间ovfsdjhp1#
您可以执行一个join并根据您的条件检查聚合结果