V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
heat
V2EX  ›  问与答

MYSQL 多表查询的字段覆盖问题

  •  
  •   heat · Sep 2, 2016 · 2796 views
    This topic created in 3525 days ago, the information mentioned may be changed or developed.
    A 和 B 表中都有相同的字段 id 、 date 和 content 。我想用一条语句查询两个表的 content LIKE %abc%的所有条目,并且按照 date DESC 排序,请问该怎么写。

    PS : B 表中有一个 aid 用来关联 A 表的 id.

    用 LEFT JOIN 发现相同字段并不能覆盖...

    PS:最好别用UNION ALL,感觉效率和JOIN比太差
    7 replies    2016-09-02 15:58:14 +08:00
    bugsnail
        1
    bugsnail  
       Sep 2, 2016
    原来的 SQL 重复字段用别名,然后在外面套一层做 order by

    select *
    from (
    原来的 SQL
    ) x
    order by x.date desc
    heat
        2
    heat  
    OP
       Sep 2, 2016
    @bugsnail 效率和写两条比的话似乎差不多哈
    bugsnail
        3
    bugsnail  
       Sep 2, 2016
    @heat 没细看,发现你 like 是 content 字段,用%%这样的形式不会用到索引的,如果能确定头字符的 like xxx%会用到索引
    zclzhangcl
        4
    zclzhangcl  
       Sep 2, 2016
    @bugsnail 楼上说的对,采用%%进行模糊匹配的话,并不会走索引,效率不会高的。从你的描述也没看出 A 表和 B 表的关联关系,所以还不如写 2 个 sql 。
    zclzhangcl
        5
    zclzhangcl  
       Sep 2, 2016
    @zclzhangcl 我说的关联关系是指业务关系
    ranran
        6
    ranran  
       Sep 2, 2016
    @zclzhangcl
    @bugsnail

    还有这样的坑啊……一直以为全文索引有用的……匹配开头或结尾…… 一般都不适用啊
    zclzhangcl
        7
    zclzhangcl  
       Sep 2, 2016
    @ranran 你在数据库里用 explain 就知道是否走索引了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1194 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    ♥ Do have faith in what you're doing.