我有一个选择查询,该查询返回多行,并且我想检查所有行是否相同。像这样:
anything_other_than(123) in (select id from foo)
因此,如果select id from foo
返回111,222,123,333
,则上述语句为false;如果select id from foo
返回123,123,123
,则为true。我该如何实现?
答案 0 :(得分:5)
一个简单的解决方案是使用= ALL
运算符:
SELECT 123 = ALL (SELECT id FROM foo);
一旦找到第一个不匹配的值,该解决方案还将停止扫描结果。
答案 1 :(得分:3)
另一种选择是将EXISTS与where条件一起使用:
select not exists (select *
from the_table
where id <> 123);
答案 2 :(得分:1)
运行此:
select count(distinct id) = 1 and count(*) > 1 from foo;
count(distinct id)
将返回1,如果所有行都相同
和count(*)
将返回总行数。
如果返回true
,则说明您有多于1行,并且所有行都相同。
答案 3 :(得分:-1)
您可以使用类似这样的内容-
select x, IF(x > 1, "FALSE", "TRUE") from
(SELECT count(distinct(A.id)) as x FROM foo as A) as B;