我有以下要求: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)
尝试这个查询。它将获取 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)
| 归档时间: |
|
| 查看次数: |
847 次 |
| 最近记录: |