› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
MIUIOS
V2EX  ›  MySQL

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

  •  
  •   MIUIOS · Mar 18, 2021 · 4398 views
    This topic created in 2057 days ago, the information mentioned may be changed or developed.

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

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

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

    18 replies  •  2021-04-03 16:24:40 +08:00
    vemier
    vemier
    Mar 18, 2021
    1
    要不加冗余字段,要不 join 。这个 join 关系应该不是很复杂吧。
    psnail
    psnail
    Mar 18, 2021❤️1
    2
    select count(*) from A where date>today()-30 and ID in (
    select ID from B where level='VIP'
    ) limit start,limit

    用 in 条件查询呢
    MrTangKe
    MrTangKe
    Mar 18, 2021
    3
    UNION ALL 可以么
    altchen
    altchen
    Mar 18, 2021❤️1
    4
    只是不能出现 join 字符?

    select a.* from order a , user b where a.user_id = b.id and b.vip_type=11 limit start,limit
    lichao
    lichao
    Mar 18, 2021
    5
    @altchen 调皮,这个本质还是 join
    altchen
    altchen
    Mar 18, 2021❤️1
    6
    @lichao 楼主说只要不出现 join 字符呀。囧
    lichao
    lichao
    Mar 18, 2021
    7
    有人说冗余,冗余也有弊端,客户的等级不会一直不变,如果变了,冗余的字段没跟着变,查询出来的数据就是错的
    AngryPanda
    AngryPanda
    Mar 18, 2021
    8
    子查询咯
    lichao
    lichao
    Mar 18, 2021
    9
    说不让用 join,一般是说并发非常高的 C 端不让用,楼主的需求看上去是 B 端,该 join 还是得 join,退一步讲同步一个从库出来也是 OK 的
    altchen
    altchen
    Mar 18, 2021
    10
    看应用场景,如果确实数据量很大,不能 join, 同时又需要各种复杂的关联及多条件查询,那楼主就往全文检索上靠吧
    DebugTy
    DebugTy
    Mar 18, 2021❤️1
    11
    有一种方式可以; 使用宽表聚合多个字表信息,最终针对这种 case 可以查询宽表
    Chenamy2017
    Chenamy2017
    Mar 18, 2021
    12
    子查询和宽表聚合查询那个快?
    wolfie
    wolfie
    Mar 18, 2021
    13
    EXISTS
    pan020037
    pan020037
    Mar 18, 2021❤️1
    14
    单独根据用户的筛选条件查出对应的用户 id
    查订单表时直接 where_in 用户 id 就完事了
    如果列表需要显示用户信息
    那就把订单数据里的 mid 聚合,去 where_in 用户表
    使用用户 id 做键,去映射订单列表的用户 id
    MIUIOS
    MIUIOS
    OP
    Mar 18, 2021
    15
    @lichao 是的 现在就是发生这个情况了 所以不让冗余
    MIUIOS
    MIUIOS
    OP
    Mar 18, 2021
    16
    够调皮哈哈哈哈
    xuanbg
    xuanbg
    Mar 18, 2021
    17
    不 join 用个毛线 mysql,mongodb 不香吗?
    dd112389
    dd112389
    Apr 3, 2021
    18
    临时表、视图、子查询.
    (用 ORM 去查两次 /doge).
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1474 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 84ms · UTC 18:27 · PVG 02:27 · LAX 10:27 · JFK 13:27
    ♥ Do have faith in what you're doing.