目前业务设计到了一个筛选,以下有两个表:
表 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 ![]() 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 ![]() 只是不能出现 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 ![]() 有一种方式可以; 使用宽表聚合多个字表信息,最终针对这种 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 ![]() 单独根据用户的筛选条件查出对应的用户 id 查订单表时直接 where_in 用户 id 就完事了 如果列表需要显示用户信息 那就把订单数据里的 mid 聚合,去 where_in 用户表 使用用户 id 做键,去映射订单列表的用户 id |
![]() | 16 MIUIOS 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). |