V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
heat
V2EX  ›  问与答

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

  •  
  •   heat · 2016-09-02 08:51:40 +08:00 · 2436 次点击
    这是一个创建于 3003 天前的主题,其中的信息可能已经有所发展或是发生改变。
    A 和 B 表中都有相同的字段 id 、 date 和 content 。我想用一条语句查询两个表的 content LIKE %abc%的所有条目,并且按照 date DESC 排序,请问该怎么写。

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

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

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

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

    还有这样的坑啊……一直以为全文索引有用的……匹配开头或结尾…… 一般都不适用啊
    zclzhangcl
        7
    zclzhangcl  
       2016-09-02 15:58:14 +08:00
    @ranran 你在数据库里用 explain 就知道是否走索引了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2814 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:59 · PVG 20:59 · LAX 04:59 · JFK 07:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.