Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回Oracle SQL中的第一个“未排序”联接_Sql_Oracle - Fatal编程技术网

返回Oracle SQL中的第一个“未排序”联接

返回Oracle SQL中的第一个“未排序”联接,sql,oracle,Sql,Oracle,我有一个“ACCOUNTS”表,其中包含ACCTNO和ACPARENT字段。一个帐户可以是另一个帐户的父帐户。一个帐户可以有许多子帐户 我们发现,某些外部进程在某些报告和输出中使用了“第一个子级”,但没有任何实际的“理由”让任何特定的子级成为“第一级”,只是代码中的一个意外错误 解决这一问题的第一步——我需要一个可以重新运行但不经常运行的查询,因此,对于所有作为家长的客户来说,优化并不能真正确定他们的“第一个孩子”是什么 问题-“第一个子项”不一定与记录ID有关。例如,如果我运行以下查询: SE

我有一个“ACCOUNTS”表,其中包含ACCTNO和ACPARENT字段。一个帐户可以是另一个帐户的父帐户。一个帐户可以有许多子帐户

我们发现,某些外部进程在某些报告和输出中使用了“第一个子级”,但没有任何实际的“理由”让任何特定的子级成为“第一级”,只是代码中的一个意外错误

解决这一问题的第一步——我需要一个可以重新运行但不经常运行的查询,因此,对于所有作为家长的客户来说,优化并不能真正确定他们的“第一个孩子”是什么

问题-“第一个子项”不一定与记录ID有关。例如,如果我运行以下查询:

SELECT ACCTNO FROM ACCOUNTS WHERE ACPARENT = '80005217';
我得到的结果是:

ACCTNO
______    
80007325
80007310
80007315
80007298
我完全可以100%确认,对于这个特定示例,帐户80007325是用作“第一个孩子”的帐户ID

另一方面,如果我运行一个简单的查询:

SELECT A1.ACCTNO, A2.ACCTNO AS CHILDACCOUNT FROM ACCOUNTS A1
INNER JOIN ACCOUNTS A2 ON A1.ACCTNO = A2.ACPARENT
WHERE A1.ACCTNO IN
(SELECT ACPARENT FROM ACCOUNTS);
然后,如果我向下滚动到80005217是父帐户的位置,我会看到以下列表:

CHILDACCOUNT
______    
80007298    
80007310
80007315
80007325
它被分类了,尽管它不是我想要的


是否有一个查询可以在单个查询中为我提供所需内容的列表?所有父帐户的列表,以及SQL未排序返回的“第一个子帐户”

为了保证记录以固定顺序出现,我们必须在ORDERBY子句中为数据库提供排序条件。如果没有定义第一性的属性,那么就不可能保证第一性。如果没有ORDER BY条款,记录基本上处于非受控状态,尽管由于 数据库内部,它们通常属于某种模式

那么,是什么使帐户80007325成为ACPARENT='80005217'的第一个子帐户?显然不是数字顺序。还有其他标准吗?创建日期?旗帜栏?看起来你需要和你的用户谈谈。他们真的在乎哪些唱片排在第一位吗?一直都是,还是只是在某个特定的报告中

如果你的用户不能指定标准,你就无能为力了


…尽管我可能会尝试在显示CHILDACCOUNT时按ACCTNO对其进行数字排序。至少这会提供一致性,用户会习惯的

重写你的问题。仅提供与脚本相关的列,并提供向下滚动并看到80005217井的一致数据样本。。它对我们来说仍然是无形的,并且是我们想要的输出,所以我们可以很容易地重新创建它并测试我们的想法。数据是如何插入到这些表中的?您是否尝试过通过创建测试表和测试数据来重现这种情况?预测未排序查询的结果在技术上是不可能的。即使每次运行查询时都能收到相同的结果,也不能保证下次查询尝试访问表时会首先选择同一行,因为此时块的读取顺序可能不同。如果需要能够预测行返回的顺序,请对查询进行排序。就这么简单。每次输入“SELECT ACCTNO FROM ACCOUNTS WHERE ACPARENT='80005217';”时,查询都会输出相同的顺序或任何其他特定账户。排序是一致的——只是没有任何依据。最终目标是重新排列孩子和家长,以便他们在使用时进行分类——但首先我们需要记录使用的“第一”是什么。