不期望查询的结果

时间:2015-04-10 15:04:40

标签: sql oracle

有一个查询:

select * from
(
select
    p.ID
from
    MY_PRODUCT_PARENT_LINK pLink
    inner join MY_PRODUCT p on pLink.FK_PARENT=p.ID
order by
    pLink.DESCENDANT_LVL desc 
)
where rownum <= 1
;

内部查询返回一行,其值为空值p.ID. 外部查询 - 一行的空值为p.ID.这里预期不是空值。

数据库服务器是Oracle 11g。

有一个复制代码:

CREATE TABLE MY_PRODUCT
(
    FK_PARENT NUMBER(19),
    ID NUMBER(19) NOT NULL,
    NAME VARCHAR2(4000 BYTE),
    CONSTRAINT PK_MY_PRODUCT PRIMARY KEY (ID)
);

INSERT INTO MY_PRODUCT (FK_PARENT, ID,NAME) VALUES (null, 111111,'PRODUCT_NAME_01');
INSERT INTO MY_PRODUCT (FK_PARENT, ID,NAME) VALUES (null, 111112,'PRODUCT_NAME_02');

CREATE TABLE MY_PRODUCT_PARENT_LINK
(
    ID NUMBER(19) NOT NULL,
    FK_PRODUCT NUMBER(19) NOT NULL,
    FK_PARENT NUMBER(19) NOT NULL,
    DESCENDANT_LVL NUMBER(19) NOT NULL,
    primary key (ID)
);

ALTER TABLE MY_PRODUCT_PARENT_LINK ADD
CONSTRAINT MY_PRD_PARENT_TO_MY_PRODUCT
FOREIGN KEY (FK_PRODUCT)
REFERENCES MY_PRODUCT (ID) ON DELETE CASCADE;

ALTER TABLE MY_PRODUCT_PARENT_LINK ADD
CONSTRAINT MY_PRD_PARENT_TO_PARENT
FOREIGN KEY (FK_PARENT)
REFERENCES MY_PRODUCT (ID) ON DELETE CASCADE;

INSERT INTO MY_PRODUCT_PARENT_LINK (ID, FK_PRODUCT, FK_PARENT, DESCENDANT_LVL) VALUES (211111, 111112, 111111, 1);

1 个答案:

答案 0 :(得分:0)

尝试在外部查询中选择ID,看看是否返回结果。所以不要在外部选择*而是选择ID。