Oracle 如果子查询不返回任何行,如何在子查询中使用获取所有行

Oracle 如果子查询不返回任何行,如何在子查询中使用获取所有行,oracle,subquery,where-clause,Oracle,Subquery,Where Clause,我有一个这样的疑问 SELECT * FROM A WHERE ID IN( SELECT ID FROM B WHERE STATUS=1 ) 如果子查询为空,我希望获取所有行 我怎样才能做到这一点?您应该使用左JOIN SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID AND B.Status = 1 您可以使用左连接和独立,如下所示: SELECT DISTINCT A.* FROM A LEFT JOIN B ON (A

我有一个这样的疑问

SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )
如果子查询为空,我希望获取所有行


我怎样才能做到这一点?

您应该使用
左JOIN

SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID AND B.Status = 1

您可以使用
左连接
独立
,如下所示:

SELECT DISTINCT A.* FROM A LEFT JOIN B
ON (A.ID = B.ID AND B.STATUS= 1)
干杯

如果您的意思是如果子查询不返回任何行,则我希望获取所有行 使用三步方法

1检查子查询

select count(*) FROM B WHERE STATUS=1
如果您得到的结果>0,请执行步骤2,否则执行步骤3

2获取子查询结果

-- your original query
SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )
3获取所有数据

SELECT * FROM A
备选一种查询方法

使用
可以按照您所说的方式编写查询:如果查询未返回任何行,则获取所有数据

SELECT * FROM A
WHERE ID IN(
        SELECT ID FROM B WHERE STATUS=1
    )
OR (SELECT count(*) FROM B WHERE STATUS=1) = 0

使用
SELECT*from A
…可以获得与上述查询相同的结果,但是如果表B中有两行相同的ID,该怎么办?我已使用
DISTINCT
删除重复的IGTH,
DISTINCT
补偿由
JOIN
引起的可能的重复-我的观点-如果您同时删除它们,您仍然会得到相同的结果-来自
A
的所有行。这只会得到b状态=1@hbaltuntel如果您想检索all means,请删除
status
的条件,如我所说,如果subquery返回一些id,则我需要它们。若子查询返回null,我希望all处于A。查询中必须使用状态条件