programing

SQL 쿼리에서 기본값을 반환하는 방법

powerit 2023. 11. 4. 13:22
반응형

SQL 쿼리에서 기본값을 반환하는 방법

쿼리가 어떤 행도 반환하지 않는다면 단일 스칼라 또는 기본값을 반환할 수 있는 쉬운 방법이 있습니까?

지금은 다음과 같은 코드 예제가 있습니다.

IF (EXISTS (SELECT * FROM Users WHERE Id = @UserId))  
    SELECT Name FROM Users WHERE Id = @UserId  
ELSE
    --default value
    SELECT 'John Doe'

IF-ELSE를 사용하지 않고 어떻게 하면 더 나은 방법으로 할 수 있을까요?

이름이 무효가 아니라고 가정하며Id고유하므로 최대 한 행까지 일치시킬 수 있습니다.

 SELECT 
    ISNULL(MAX(Name),'John Doe')
 FROM 
    Users 
 WHERE 
    Id = @UserId  

해라ISNULL아니면COALESCE:

SELECT ISNULL((SELECT TOP 1 Name FROM Users WHERE Id = @UserId), 'John Doe')

이 ID를 가진 사용자가 없는 경우 내부 선택은 아무것도 반환하지 않습니다. null은 이 경우를 해결합니다.

이거 먹어봐요.

SELECT IFNULL(Name,'John Doe')
FROM   Users
WHERE  Id = @UserId) 

다음 컨스트럭트를 사용하여 if 문을 삭제할 수 있지만 그렇다고 해서 더 좋은 것은 아닙니다.

SELECT Name FROM Users WHERE Id = @UserId UNION ALL 
SELECT 'John Doe' WHERE NOT EXISTS (SELECT Name FROM Users WHERE  Id = @UserId)

시도는 null입니다.

SELECT IsNULL(Name, 'John Doe')  FROM Users WHERE Id = @UserId

편집:

drop table users
go
create table users
(id int,name varchar(20))
go
insert into users select 1,'1'
 go
declare @userid int
set @userid = 1
select isnull(username.username, 'John Doe')
from (select @userid as userid) userid
outer apply (SELECT  name as username FROM Users WHERE Id = userid.userid ) username
--outer apply (SELECT  name as username FROM Users WHERE Id = @userid ) username

@@ROWCOUNT를 사용하여 반품 여부를 확인할 수 있을 것 같습니다.

SELECT Name FROM Users WHERE Id = @UserId  
if(@@ROWCOUNT = 0)
  SELECT 'John Doe'

한 행이 예상되는 경우 변수를 사용할 수도 있습니다.

declare @name varchar(100)
set @name = (select top 1 name from users where id = @userId)
if(@name is null) set @name = 'John Doe'
select @name

가장 좋은 방법은 @name을 처음 선언하는 것입니다.그런 다음 사용자 ID를 기준으로 이 값을 설정한 다음 @name이 null이면 기본 이름 표시, 그렇지 않으면 이름 표시...그 방법은 다른 방법과 마찬가지로 효율적일 것이고 더 읽을 수 있을 것입니다.다른 방법에 대해서는 좋은 의견이 없는 한 다른 사용자는 무엇이 일어나고 있는지 알기 위해 많은 생각을 해야 합니다.

declare @userid int
set @userid = 1
select isnull(
               (select name from users where id = @userid),
               'John Doe'
               )
 go
--My preffered would be this one..
declare @name varchar(20),@userid int
set @userid = 1
select  @name =  name from users where id = @userid
select isnull(@name,'John Doe') 

쿼리가 최대 한 행을 반환해야 하는 경우 기본값을 사용한 다음 제한을 사용합니다.

SELECT * FROM 
 (
  SELECT Name FROM Users WHERE Id = @UserId`
  UNION
  SELECT 'John Doe' AS Name --Default value
 ) AS subquery
LIMIT 1

쿼리와 기본값 모두 원하는 만큼의 열을 가질 수 있으며 null이 아니라고 보장할 필요는 없습니다.

언급URL : https://stackoverflow.com/questions/11503463/how-to-return-default-value-from-sql-query

반응형