栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQL:多次重复结果行,并对行编号

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQL:多次重复结果行,并对行编号

对于MySQL,使用穷人的generate_series,这是通过视图完成的。MySQL是四大公司中唯一没有CTE功能的RDBMS

实际上,您可以在支持视图的数据库上使用此技术。所以这实际上是所有数据库

生成器技术源自此处:http : //use-the-index-
luke.com/blog/2011-07-30/mysql-row-generator#mysql_generator_pre

我们所做的唯一较小的修改就是我们分别用单纯的乘法和加法替换了原始技术中的按位( 左移按位or )技术。因为Sql
Server和Oracle没有左移运算符。

保证99%的抽象都可以在除Oracle之外的所有数据库上运行;Oracle

SELECt
不能没有任何表,为了做到这一点,需要从虚拟表中选择一个,Oracle已经提供了一个表,称为
DUAL
表。数据库可移植性是梦dream以求的:-)

这是适用于所有RDBMS的抽象视图,在所有主要数据库中都没有按位操作(在这种情况下,这实际上并不是必需的)和细微差别(我们删除

ORREPLACE
CREATE VIEW
,仅Postgresql和MySQL支持它们)。

Oracle警告:

FROM DUAL
在每个
SELECt
表达式之后

CREATE VIEW generator_16AS SELECT 0 n UNIOn ALL SELECT 1  UNIOn ALL SELECT 2  UNIOn ALL    SELECT 3   UNIOn ALL SELECT 4  UNIOn ALL SELECT 5  UNIOn ALL   SELECT 6   UNIOn ALL SELECT 7  UNIOn ALL SELECT 8  UNIOn ALL   SELECT 9   UNIOn ALL SELECT 10 UNIOn ALL SELECT 11 UNIOn ALL   SELECT 12  UNIOn ALL SELECT 13 UNIOn ALL SELECT 14 UNIOn ALL    SELECT 15;CREATE VIEW generator_256AS SELECT ( ( hi.n * 16 ) + lo.n ) AS n     FROM generator_16 lo, generator_16 hi;CREATE VIEW generator_4kAS SELECt ( ( hi.n * 256 ) + lo.n ) AS n     FROM generator_256 lo, generator_16 hi;CREATE VIEW generator_64kAS SELECt ( ( hi.n * 256 ) + lo.n ) AS n     FROM generator_256 lo, generator_256 hi;CREATE VIEW generator_1mAS SELECt ( ( hi.n * 65536 ) + lo.n ) AS n     FROM generator_64k lo, generator_16 hi;

然后使用以下查询:

SELECt t.value, t.cnt, i.nFROM tbl tJOIN generator_64k i ON i.n between 1 and t.cntorder by t.value, i.n

PostgreSQL:http://www.sqlfiddle.com/#!1
/ 1541d /
1

甲骨文:http :
//www.sqlfiddle.com/#!4/26c05/1

SQL
Server:http://www.sqlfiddle.com/#!6 /
84bee / 1

MySQL:http://www.sqlfiddle.com/#!2 /
78f5b / 1



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号