Mysql 不进行 join 操作如何做多表筛选呢

2021-03-18 15:13:37 +08:00
 totoro52

目前业务设计到了一个筛选,以下有两个表:
表 A 订单表
表 B 客户表
同时订单表储存了客户的 ID (只有 ID,没有冗余其他字段)

要求:
不使用 JOIN 关键词的情况下,找出某一组符合客户筛选要求的订单,比如找等级为 VIP 的客户,同时还要分页

有没有做过类似的大牛给个思路

2894 次点击
所在节点    MySQL
18 条回复
vemier
2021-03-18 15:34:23 +08:00
要不加冗余字段,要不 join 。这个 join 关系应该不是很复杂吧。
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 条件查询呢
MrTangKe
2021-03-18 15:41:54 +08:00
UNION ALL 可以么
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
lichao
2021-03-18 15:52:37 +08:00
@altchen 调皮,这个本质还是 join
altchen
2021-03-18 15:53:59 +08:00
@lichao 楼主说只要不出现 join 字符呀。囧
lichao
2021-03-18 15:54:01 +08:00
有人说冗余,冗余也有弊端,客户的等级不会一直不变,如果变了,冗余的字段没跟着变,查询出来的数据就是错的
AngryPanda
2021-03-18 15:55:26 +08:00
子查询咯
lichao
2021-03-18 15:59:27 +08:00
说不让用 join,一般是说并发非常高的 C 端不让用,楼主的需求看上去是 B 端,该 join 还是得 join,退一步讲同步一个从库出来也是 OK 的
altchen
2021-03-18 16:04:43 +08:00
看应用场景,如果确实数据量很大,不能 join, 同时又需要各种复杂的关联及多条件查询,那楼主就往全文检索上靠吧
DebugTy
2021-03-18 16:38:06 +08:00
有一种方式可以; 使用宽表聚合多个字表信息,最终针对这种 case 可以查询宽表
Chenamy2017
2021-03-18 16:48:16 +08:00
子查询和宽表聚合查询那个快?
wolfie
2021-03-18 16:54:35 +08:00
EXISTS
pan020037
2021-03-18 17:10:41 +08:00
单独根据用户的筛选条件查出对应的用户 id
查订单表时直接 where_in 用户 id 就完事了
如果列表需要显示用户信息
那就把订单数据里的 mid 聚合,去 where_in 用户表
使用用户 id 做键,去映射订单列表的用户 id
totoro52
2021-03-18 18:03:15 +08:00
@lichao 是的 现在就是发生这个情况了 所以不让冗余
totoro52
2021-03-18 18:04:30 +08:00
够调皮哈哈哈哈
xuanbg
2021-03-18 21:46:04 +08:00
不 join 用个毛线 mysql,mongodb 不香吗?
dd112389
2021-04-03 16:24:40 +08:00
临时表、视图、子查询.
(用 ORM 去查两次 /doge).

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/762843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX