› 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
sytnishizuiai
V2EX  ›  MySQL

MySQL 语句求指点

  •  
  •   sytnishizuiai · Dec 25, 2020 · 2589 views
    This topic created in 2101 days ago, the information mentioned may be changed or developed.
    <thead> </thead>
    id fid date
    1 a 2020-12-10
    2 a 2020-12-30
    3 b 2020-12-15

    求教下,我写多表联查的时候,子表想要 date 小于当前日期,fid 相同的都不要( date<2020-12-25, 所有 fid=a 都不要),这种怎么写,想了好久写不出也查不到。 实在不行我就入库的时候算出最大日期存入主表了。(而且多表查询还要分页)

    l00t
        1
    l00t  
       Dec 25, 2020
    先把需求想清楚说明白…… 多表联查,表呢?要查什么?关联条件是什么?
    sytnishizuiai
        2
    sytnishizuiai  
    OP
       Dec 25, 2020
    @l00t 抱歉,因为表比较多,想先问问如果单表发生这种情况该怎么办。刚才用 MAX 可以了,但是多表查越写越复杂,之前就已经 3 表查了,现在要 4 表了。

    所以准备拆开查,反正性能没什么要求,后台用。
    berg223
        3
    berg223  
       Dec 25, 2020
    第一步:select count(*),fid from <table> where date < 2020-12-25 group by fid
    第二步:结果集中过滤掉 count(*) > 1 的行即可。实现这一步有两种选择方式:1.在业务代码中实现; 2.继续用 sql 实现,写完不要忘记用 explain 看一下可不可以走索引。
    sytnishizuiai
        4
    sytnishizuiai  
    OP
       Dec 25, 2020
    @berg223 嗯,和我用 max 找出每组 fid 最大的 date 效果一样,不过会造成 4 表查询,准备不走这条路了,要么入库的时候把最大的 date 存入主表,这样简化查询,要么就重新写这块的多表查询。
    谢谢。
    hanbin
        5
    hanbin  
       Dec 25, 2020
    EXPLAIN SELECT
    MASTER.id
    FROM
    MASTER jion other_a AS a ON MASTER.id = a.master_id
    WHERE
    a.date < 2020-12-25
    AND a.fid <> 'a'

    联表查询、联合查询、临时表、条件语句组合使用即可。没有用 sql 解决不了的需求,如果有,那就是学会的奇淫技巧不够。
    keepeye
        6
    keepeye  
       Dec 25, 2020
    @hanbin 他要的是过滤 fid 出现超过一次的,不是特指 'a'
    keepeye
        7
    keepeye  
       Dec 25, 2020
    子查询不能用 group by 吗?
    select a.*, b.* from a inner join (select fid, count(*) as c from b where `date` < '当前日期' group by fid having c = 1) as b WHERE 其他条件..
    sytnishizuiai
        8
    sytnishizuiai  
    OP
       Dec 25, 2020
    @keepeye 嗯,我刚才测试 max group by 把数据筛选后再联结查,不过就 4 个表联查了,我准备这个表单独写个查,然后数据合并筛选,这样方便点。
    sytnishizuiai
        9
    sytnishizuiai  
    OP
       Dec 25, 2020
    这功能刚才讨论后不做了。。。太棒了。。。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   946 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 19:08 · PVG 03:08 · LAX 12:08 · JFK 15:08
    ♥ Do have faith in what you're doing.