我们有一家为我们公司管理AS400的供应商。他们的一项服务是通过我可以使用iSeries查询的表提供文件。但是,该表只有一列,每条记录只是其中一个文件的一行。所以我需要从表中选择所有记录,同时保持输入顺序,但我没有列可以使用ORDER BY。
我理解在关系数据库中,没有ORDER BY子句的select语句没有保证排序顺序。 AS400 / iSeries系统是否以相同的方式运行?从我所做的阅读来看,它似乎是一种不同类型的DBMS,但是我没有找到任何告诉我是否可能改变/不改变记录被插入到记录中的顺序的东西。表。它"出现"每当我运行一个选择时,我总是得到看起来正确的排序顺序,但是如果可以的话我想保证它。
提前感谢您的任何建议和帮助。
答案 0 :(得分:3)
如果没有明确的ORDER BY
子句,则可以按SQL优化程序认为最有效的任何顺序返回记录。
*YES
。
您可以使用RRN函数按文件中的物理顺序对记录进行排序:
SELECT * FROM TABLENAME ORDER BY RRN(TABLENAME)
答案 1 :(得分:-2)
通过RRN(mytable)添加子句,这将获得FIFO序列中的记录。但这取决于供应商如何装载表。不要相信这有一天会失败。它将与原生的as400表一起使用。
考虑在select语句中添加order by子句以满足您的需求。
这永远有效。如果您需要Zip代码订单中的记录,请按邮政编码排序。如果您需要按名称顺序记录,请按“名称”排序。除非您指定一个order by子句,否则不保证记录的顺序。
你的问题。是的,当select中没有order by子句时,select可以在DB2(as400)中使用select来改变顺序。 Db2尝试使用索引更快地显示结果。
例如
select * from customer when cust_name like 'Dan%'
有一个关于客户的索引由cust_name。
结果可能会由cust_name排序。取决于其他因素,但理论上,没有order by子句的select可以以任何顺序出现,但很可能它将是表或表主键的索引序列。