使用 case 语句检查 SQL 表中记录是否存在

Vic*_*cky 4 sql t-sql database sql-server

当服务表中存在具有 ID 的记录时,下面的查询将返回“Found”,但当服务表中不存在该记录时,以下查询不会返回“Not Found”。我不明白为什么。

select case when  exists (select idaccount from services  where idaccount 
=s.idaccount )
 then 'Found'
 else 'NotFound'  end as GSO  
 from services s 
 where s.idaccount in ( 1421)
Run Code Online (Sandbox Code Playgroud)

Mar*_*inJ 6

您的查询只会返回一行(如果存在),因此 case 语句是多余的,您也可以编写

SELECT 'Found' FROM services s WHERE s.idaccount IN (1421)
Run Code Online (Sandbox Code Playgroud)

虽然它没有什么意义,但你可以这样写:

SELECT CASE
         WHEN EXISTS (SELECT 1 FROM services WHERE idaccount = 1421)
         THEN 'Found'

         ELSE 'NotFound'
       END
Run Code Online (Sandbox Code Playgroud)

FROM注意最外面缺少子句SELECT。编写相同内容的更快方法:

SELECT COALESCE((SELECT 'Found' FROM services WHERE idaccount = 1421), 'NotFound')
Run Code Online (Sandbox Code Playgroud)