zoukankan      html  css  js  c++  java
  • mysql中的union和order by、limit

     

    我有一个表

    CREATE TABLE `test1` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `name` varchar(20) NOT NULL,
      `desc` varchar(100) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    (1)以下查询会报错误:[Err] 1221 - Incorrect usage of UNION and ORDER BY

    select * from test1 where name like 'A%' order by name
    union
    select * from test1 where name like 'B%' order by name

    应改为:

    select * from test1 where name like 'A%'
    union
    select * from test1 where name like 'B%' order by name

    因为union中,在不用括号的情况下,只能用一个order by(想一想,如果union两边的order by的列名不一样会怎么样),这会对union后的结果集进行排序

    或者改为:

    (select * from test1 where name like 'A%' order by name)
    union
    (select * from test1 where name like 'B%' order by name)

    这两个order by在union前进行

    (2)同样的

    select * from test1 where name like 'A%' limit 10
    union
    select * from test1 where name like 'B%' limit 20

    相当于

    (select * from test1 where name like 'A%' limit 10)
    union
    (select * from test1 where name like 'B%') limit 20

    即后一个limit作用于的是union后的结果集,而不是union后的select

    也可以加括号来得到你想要的结果

    (select * from test1 where name like 'A%' limit 10)
    union
    (select * from test1 where name like 'B%' limit 20)

  • 相关阅读:
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    jQuery火箭图标返回顶部代码
    redis被攻击,怎么预防
    Redis3.2.12单节点安装
    Linux安装Redis、后台运行、系统自启动
    Redis 密码设置和查看密码
    Redis protected-mode属性解读
    SpringCloud(9)----mysql实现配置中心
    SpringCloud(8)----zuul权限校验、接口限流
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15454685.html
Copyright © 2011-2022 走看看