如果表格不包含条件,请选择结果

时间:2016-05-17 19:38:48

标签: sql oracle

表格

id | term 
---+----- 
 1 | 2015
 2 | 2015
 3 | 2016 

我有这张表,想要选择所有2015年的结果:

select * from table where term = 2015

但是,我只希望它返回2015年的结果如果2015年是表中唯一的术语。如果还有其他内容,则不应返回任何行。

例如,当前表应该返回任何内容,因为id=3的术语为2016。如果id=3的字词为2015,我希望它显示所有2015个结果。

我怎样才能做到这一点。

3 个答案:

答案 0 :(得分:0)

select * 
from `table`
where term = 2015
and not exists(select * from `table` where term != 2015)

答案 1 :(得分:0)

您可以使用NOT EXISTS

SELECT * 
FROM table 
WHERE term = 2015 
  AND NOT EXISTS (SELECT 1 
                  FROM table 
                  WHERE term <> 2015
                  )

演示:SQL Fiddle

如果子查询返回任何记录,则

NOT EXISTS计算结果为true。这是一个简单的示例,可以通过将子查询与外部查询相关联来扩展功能。

答案 2 :(得分:0)

我认为你所说的是:如果术语栏中至少有两个不同的值,则不返回任何内容。如果只有一个值,则返回整个表。

你没有说明术语是否可以为空(如果它可能包含空值)。假设它不是,你可以用这种方式快速得到你的结果:

select * from your_table where (select count (distinct term) from your_table) = 1;

(我希望你没有一张名为字面的桌子&#34; table&#34;!)

如果term可以为空,则需要说明如何处理术语列中的null。