目前业务设计到了一个筛选,以下有两个表:
表 A 订单表
表 B 客户表
同时订单表储存了客户的 ID (只有 ID,没有冗余其他字段)
要求:
不使用 JOIN 关键词的情况下,找出某一组符合客户筛选要求的订单,比如找等级为 VIP 的客户,同时还要分页
有没有做过类似的大牛给个思路
1
vemier 2021-03-18 15:34:23 +08:00
要不加冗余字段,要不 join 。这个 join 关系应该不是很复杂吧。
|
2
psnail 2021-03-18 15:36:44 +08:00 1
select count(*) from A where date>today()-30 and ID in (
select ID from B where level='VIP' ) limit start,limit 用 in 条件查询呢 |
3
MrTangKe 2021-03-18 15:41:54 +08:00
UNION ALL 可以么
|
4
altchen 2021-03-18 15:50:16 +08:00 1
只是不能出现 join 字符?
select a.* from order a , user b where a.user_id = b.id and b.vip_type=11 limit start,limit |
7
lichao 2021-03-18 15:54:01 +08:00
有人说冗余,冗余也有弊端,客户的等级不会一直不变,如果变了,冗余的字段没跟着变,查询出来的数据就是错的
|
8
AngryPanda 2021-03-18 15:55:26 +08:00
子查询咯
|
9
lichao 2021-03-18 15:59:27 +08:00
说不让用 join,一般是说并发非常高的 C 端不让用,楼主的需求看上去是 B 端,该 join 还是得 join,退一步讲同步一个从库出来也是 OK 的
|
10
altchen 2021-03-18 16:04:43 +08:00
看应用场景,如果确实数据量很大,不能 join, 同时又需要各种复杂的关联及多条件查询,那楼主就往全文检索上靠吧
|
11
DebugTy 2021-03-18 16:38:06 +08:00 1
有一种方式可以; 使用宽表聚合多个字表信息,最终针对这种 case 可以查询宽表
|
12
Chenamy2017 2021-03-18 16:48:16 +08:00
子查询和宽表聚合查询那个快?
|
13
wolfie 2021-03-18 16:54:35 +08:00
EXISTS
|
14
pan020037 2021-03-18 17:10:41 +08:00 1
单独根据用户的筛选条件查出对应的用户 id
查订单表时直接 where_in 用户 id 就完事了 如果列表需要显示用户信息 那就把订单数据里的 mid 聚合,去 where_in 用户表 使用用户 id 做键,去映射订单列表的用户 id |
16
totoro52 OP 够调皮哈哈哈哈
|
17
xuanbg 2021-03-18 21:46:04 +08:00
不 join 用个毛线 mysql,mongodb 不香吗?
|
18
dd112389 2021-04-03 16:24:40 +08:00
临时表、视图、子查询.
(用 ORM 去查两次 /doge). |