【发布时间】:2019-05-05 15:06:43
【问题描述】:
我正在尝试在 Oracle 12c 的基础上从 DETAIL 表中选择条目,该表应满足两个 where 约束:
- 外键在子选择中
- 列为空
以下带有子选择(in-clause)的语句根本不返回任何结果。
select *
from DETAIL
where (PARENT_ID) in (
select ID from MASTER where COL1 = 1)
and COL2 is null;
而且左连接也不返回任何结果:
select d.*
from MASTER m
left join DETAIL d
on d.PARENT_ID = m.ID
where m.COL1 = 1
and d.COL2 is null;
我的表格设置包含以下表格:
create table MASTER (
ID NUMBER(19) NOT NULL,
COL1 NUMBER(19),
primary key (ID)
);
insert into MASTER ("ID", "COL1") VALUES (1, 1);
insert into MASTER ("ID", "COL1") VALUES (2, 2);
insert into MASTER ("ID", "COL1") VALUES (3, 1);
create table DETAIL (
ID NUMBER(19) NOT NULL,
PARENT_ID NUMBER(19),
COL2 NUMBER(2,0),
primary key (ID),
foreign key (PARENT_ID) references MASTER(ID)
);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (1, 1, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (2, 2, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (3, 3, 1);
insert into DETAIL ("ID", "PARENT_ID", "COL2") VALUES (4, 3, 2);
根据上面的代码,我希望得到超过 0 个条目。
有什么建议吗?谢谢!
【问题讨论】:
-
在您的示例中,所有具有 parent_id mathc 的行和匹配的行都没有 col2 和 NULL .. 这意味着您的 LEFT JOIN 返回完整的结果
-
“我希望”为什么?当您告诉我们原因时,这有助于我们向您解释您有错误的想法。
标签: sql oracle subquery left-join