恐怕我不能告诉你为什么你没有例外,但是我可以推测为什么它选择了CATEGORIES版本的列而不是PARTS版本的列。
据我了解,在左联接的情况下,查询(PARTS)中的“主”表具有歧义性
尚不清楚从概念上看查询时,“主”是指左联接中的左表,还是“驱动”表。但是无论哪种情况,您在“主”表中所看到的都是“主”表。您编写的查询不一定是该查询实际执行中的“主”表。
我的猜测是,Oracle在执行查询时只是使用它命中的第一个表中的列。并且由于sql中的大多数单独操作不需要先击打一个表,因此DBMS将在解析时决定哪个是最有效的扫描对象。尝试获取查询的执行计划。我怀疑它可能显示它先击中类别,然后击中PARTS。