为什么ROWNUM <=,左外部联接和子查询的这种组合有时会给出null

时间:2019-06-06 07:46:39

标签: sql oracle

我有一个类似于以下内容的自动生成的SQL,我试图对其进行一些简化以说明我所面临的问题的症结所在。 Customer.Id是一个VARCHAR2(40字节),Order.CustomerId是一个数字(10,0)

SELECT *
FROM 
(
    SELECT query.*, ROWNUM ROWNUM__
    FROM 
    (
        SELECT cst.name, cst.lastname, ord.product, ord.price
        FROM Customer cst
        LEFT OUTER JOIN Order ord ON ord.Manufacturer = 'Samsung'
        AND TO_CHAR(cst.Id) = TO_CHAR(ord.CUSTOMER_ID)
    ) query
    WHERE ROWNUM <= 1000
)
WHERE ROWNUM__ > 0

当我自己运行最里面的查询时,得到的是我期望的结果,但是我遇到的问题是,当一起运行所有内容时,LEFT OUTER JOIN返回空列。如果我删除下面的“ where子句”,则它可以工作,但不幸的是,分页功能由我的工作场所所建立的库处理,并且必须使用它,因此更改这些ROWNUM标准对我来说不是一个选择。

WHERE ROWNUM <= 1000

如果我删除它,那么它可以工作,但是我需要能够通过表的ID加入。

TO_CHAR(cst.Id) = TO_CHAR(ord.CUSTOMER_ID)

如果有帮助,执行计划为:

enter image description here

0 个答案:

没有答案