如何在不使用count(*)... limit 1的情况下检查是否存在某些内容

时间:2010-05-19 20:47:13

标签: sql-server

我的代码是SELECT COUNT(*) FROM name_list WHERE [name]='a' LIMIT 1

似乎SQL Server中没有限制子句。那么我怎么说告诉我name_list.name中是否存在'a'?

6 个答案:

答案 0 :(得分:4)

IF EXISTS(SELECT * FROM name_list WHERE name = 'a')
BEGIN
    -- such a record exists
END
ELSE
BEGIN
    -- such a record does not exist
END

注意事项:

  • 不要担心SELECT * - 数据库引擎知道你在问什么
  • IF仅用于说明 - EXISTS(SELECT ...)表达式可以回答您的问题
  • 如果块中只有一个语句,BEGINEND严格来说是不必要的

答案 1 :(得分:3)

COUNT(*)无论如何都会返回一行,无需限制 LIMIT的ANSI等价物是TOP:SELECT TOP(1) ... FROM ... WHERE...
最后,有EXISTS:IF EXISTS (SELECT * FROM ... WHERE ...)

答案 2 :(得分:0)

没有nono错了。

首先有顶部,所以你必须说:

select top 1 1 from name_list where [name]='a'

如果有数据,您将获得一个只有一个未命名字段的行,其中1个没有查询,如果没有数据则根本没有行。

答案 3 :(得分:0)

TOP子句最接近LIMIT。以下将返回名称字段等于'a'的第一行中的所有字段(如果多于一行匹配,则返回的行将是未定义的,除非您还提供ORDER BY子句)。 / p>

SELECT TOP 1 * FROM name_list WHERE [name]='a'

但如果您正在进行COUNT(*),则无需使用它。以下将返回一行,其中包含一个字段,该字段是整个表中名称字段eqals为'a'的行数。

SELECT COUNT(*) FROM name_list WHERE [name]='a'

答案 4 :(得分:0)

IF (EXISTS(SELECT [name] FROM name_list where [name] = 'a'))
begin
   //do other work if exists
end

你也可以这样做:

IF (NOT EXISTS(SELECT [name] FROM name_list where [name] = 'a'))
begin
   //do other work if not exists
end

答案 5 :(得分:0)

此查询完全返回您的预期:

SELECT TOP 1 CASE WHEN EXISTS(SELECT * WHERE [name] = 'a') THEN 1 ELSE 0 END FROM name_list