SQL 中的 EXISTS 子句

Sre*_*ree 5 oracle

我有以下要求:main_set表包含所有 ID,user_input表包含所有用户输入的 ID。

我想要 user_input 表中存在的 id 的结果。如果 user_input 表中没有任何内容,那么我想要 main_input 表中的所有 id。

这是我到目前为止所拥有的:

create table main_set as
select 1 id from dual
union all
select 2 from dual
union all
select 3 from dual

create table user_input as
select 1 id from dual
union all
select 2 from dual

select *
  from main_set ms
  where exists (select null
                        from user_input ui
                       where ui.id = ms.id)
Run Code Online (Sandbox Code Playgroud)

Der*_*omm 2

尝试这个查询。它将获取 main_set 和 user_input 中都存在的记录计数。然后,它将使用该计数来确定是否返回所有 main_set 记录(当 cc = 0 时)或仅返回那些匹配的记录(当 cc > 0 且 ui.id 不为空时)

select ms.id
  from main_set ms
  left join user_input ui on ms.id = ui.id
  cross join (
    select count(*) c 
    from main_set ms
    left join user_input ui on ms.id = ui.id
    where ui.id is not null) c
where c.c = 0 or (c.c > 0 and ui.id is not null)
Run Code Online (Sandbox Code Playgroud)