添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
插入数据: insert into table123 (oid,Name) values (0,'陈灰灰'); insert into table123 (oid,Name) values (1,'董老师'); insert into table123 (oid,Name) values (2,'周杰伦'); insert into table123 (oid,Name) values (3,'陈灰灰'); insert into table123 (oid,Name) values (4,'董老师'); insert into table123 (oid,Name) values (5,'周杰伦');

需求:对查询到的 Name 去重后用 Oid 进行排序.

Sqlite中 Distinct 和 order by 好像是可以同时直接使用的,查出来的值没有重复的.

select distinct(Name) from table order by Oid

冲突: 可是当我在 Sqlserver和Access的数据库里使用上面的查询语句,发现就出现如下错误:

查资料说是 : ① Sqlserver和Access中的 distinct 的执行顺序高于 order by

② Sqlserver和Access中的 distinct 执行时会对查询的值进行先去重,产生一张去重了的虚拟的临时表

③ Sqlserver和Access中的 order by执行时对已经去重的虚拟临时表按照 Oid 进行排序,产生新的虚拟临时表

最后 : 如果order by的字段不在select中,执行sql语句时首先执行distinct,之后产生的虚拟临时表中没有order by的字段,所以再执行order by时会报错。(此处引用: icebangbang )

所以是 distinct和order by的执行顺序不一样所导致的,所以查出来的值里虽然按照oid排序了,但是有重复的 Name 值。

要解决上面的问题,可以使用另一个函数(Max或者Min)来帮助完成查询.

Sqlserver 和 Access 数据库代码:

select Name from table group by Name order by Max(Oid) asc

这样就可以很好的查询出按照Oid排序的不同 Name 值了,Name值也不会重复出现了。

或者这样写试试 : select * from(select distinct xxx from 表名) d order by d.列名;   ( 先去重,再排序 )

所创建的一个表:创建表:CREATE TABLE table( Oid int primary key, Name varchar(10))插入数据:insert into table123 (oid,Name) values (0,'陈灰灰');insert into table123 (oid,Name) values (1,'董老师');insert into ta...
上一篇:【 SQL 基础(一)】【 SQL 简介+ SQL 语法+ SQL SELECT 语句+ SQL SELECT DISTINCT 语句】 文章目录 SQL WHERE 子句引号的 使用 SQL AND & OR 运算符 SQL ORDER BY 子句 SQL WHERE 子句 WHERE 子句用于规定选择的标准。 如需有条件地从表 选取数据,可将 WHERE 子句添加到 SELECT 语句。 SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 可在 WHERE 子句 使用 的运算符 使用 WHERE 子句 如果只希望选取居住在城市 “北京” 的人,我们需要向 SELECT
My SQL 通常 使用 GROUPBY(本质上是排序动作)完成 DISTINCT 操作,如果 DISTINCT 操作和 ORDER BY操作组合 使用 ,通常会用到临时表.这样会影响性能. 在一些情况下,My SQL 可以 使用 索引优化 DISTINCT 操作,但需要活学活用.本文涉及一个不能利用索引完成 DISTINCT 操作的实例. 实例1 使用 索引优化 DISTINCT 操作 create table m11 (a int, b int, c int, d int, primary key(a)) engine=INNODB; insert into m11 values (1,1,1,1),(2,2,2,2),(3,3
(5)SELECT (5-2) DISTINCT (5-3)TOP(<top>)(5-1) <select_list> (1)FROM (1-J) <left> <join> JOIN <right> on <on> (2)WHERE <where> (3)GROUP BY <group> (4)HAVING <having> (6) ORDER BY < order >;   每一步都会生成一个虚拟表,该虚拟表会作为下一步的输入。
大型数据库Oracle,Sybase(包括 SQL AnyWhere),DB2,MS_ SQL 型数据库MS_Access,My SQL 桌面型数据库Paradox,DBF系列数据库,MS_Execl,Text 其他支持 SQL 92标准的数据库 2、数据库的连接采用ADO连接,因此无需安装和卸载 3、支持 SQL 查询语句绝大部分语法 3.1 选择字段 3.1.1 Select [All] [ Distinct ]; 3.1.2 特殊语法,记录条数限定Top(MS_ SQL ),Rownum(Oracle), Limit(My SQL ),Set RowCount(Sybase)) 3.1.3 字段表达式或者计算字段 3.2 选择表 (From) 3.3 条件筛选 (Where) 3.4 分组 (Group By) 3.5 组内条件 (Having) 3.6 排序 ( Order By) 3.7 数据表的内连接、外连接 3.7.1 SQL 92 标准:Inner Join、Left Join、Right Join、Full Join, 3.7.2 特殊语法:*=、=*、*=*(MS_ SQL ,Sybase),(+)(Oracle) 3.8 联合 (Union [All],Minus,Intersect) 3.9 字段别名,数据表别名 3.10 SQL 子查询表,内嵌 SQL 子句 4、粘贴字段、系统函数 5、 SQL 查询语句反向分析, 无论多么复杂的语句,都能分析得出来 包括上面提到的所有 SQL 语法 6、 SQL 文件拖放,然后反向分析 7、数据库视图创建和重建(目前仅支持Oracle,Sybase,MS_ SQL ) 8、附加Delphi 5和Delphi 6的控件包,支持Delphi 5,6开发环境 9、 SQL 语句智能换行 10、其他功能 10.1 SQL 文件保存、打开 10.2 支持多个数据库连接 10.3 SQL 语句关键词高亮度显示 10.4 简单 SQL 查询语句转换为Delete,Update,Insert语句 在 sql order by和 distinct 同时 使用 时,如果指定了 SELECT DISTINCT ,那么 ORDER BY 子句 的项就必须出现在选择列表 。例如: select distinct id from table_name order by number desc;运行时往往会报错。因为在 order by 出现的number没有在select distinct 出现,...
文章目录1、为表起别名as2、查询前n部分数据:top n 列名:表示查看前n行3、排序: order by 列名1 asc(升序)|desc(降序),列名1 asc|desc…4、消除重复行: distinct 5、条件查询:写在where后面6、模糊查询:用于处理字符串类型的值,运算符包括:like % _ [] ^7、null的判断: 使用 is null或is not null,与其它值计算时返回null,排序时null被认为是最小8、连接:join 表名 on 关联条件9、聚合函数:对行数据进行合并10、开窗函数: over()11、分组:group by 列名1,列名2… 1、为表起别名as
当select子句 使用 distinct 关键字时,可能会与 order by子句冲突,从而产生如下错误 错误:ORA-01791: not a SELECTed expression 根据 sql 语句的执行顺序, distinct 的执行顺序优先于 order by,因此 distinct 对select的字段去重后, order by只能在 distinct 后返回的结果集进行排序 因此 order by 后的字段如...