表格
id | term
---+-----
1 | 2015
2 | 2015
3 | 2016
我有这张表,想要选择所有2015年的结果:
select * from table where term = 2015
但是,我只希望它返回2015年的结果如果2015年是表中唯一的术语。如果还有其他内容,则不应返回任何行。
例如,当前表应该返回任何内容,因为id=3
的术语为2016
。如果id=3
的字词为2015
,我希望它显示所有2015
个结果。
我怎样才能做到这一点。
答案 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。