› 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 · 4276 views
    This topic created in 2022 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
        1
    vemier  
       Mar 18, 2021
    要不加冗余字段,要不 join 。这个 join 关系应该不是很复杂吧。
    psnail
        2
    psnail  
       Mar 18, 2021   ❤️ 1
    select count(*) from A where date>today()-30 and ID in (
    select ID from B where level='VIP'
    ) limit start,limit

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

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