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)

  • 相关阅读:
    移动web基础
    CSS3
    HTML5新属性
    CSS3初体验之伪元素选择器
    HTML5+CSS3day_01
    CSS补充
    CSS_day02
    CSS_day01
    HTML_day02
    HTML_day01
  • 原文地址:https://www.cnblogs.com/lxwphp/p/8329372.html
Copyright © 2011-2022 走看看