복붙노트

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

SQL

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

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

이 순간에 나는이 코드 예제 같은 것을 가지고 :

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

어떻게 IF-ELSE 사용하지 않고 더 나은 방법으로 그렇게합니까?

해결법

  1. ==============================

    1.이름을 가정하면 Null을 허용하지 않고 ID가 가장 하나의 행에 일치 할 수 있도록 고유한지.

    이름을 가정하면 Null을 허용하지 않고 ID가 가장 하나의 행에 일치 할 수 있도록 고유한지.

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

    2.ISNULL 또는 유착을보십시오 :

    ISNULL 또는 유착을보십시오 :

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

    이 ID를 가진 사용자의 존재가의 ISNULL이 사건을 해결하지 않을 경우 내부 SELECT는 아무 것도 반환하지 않습니다.

  3. ==============================

    3.당신은 다음과 같은 구조를 사용하여 if 문을 삭제할 수 있습니다하지만 necessarely 더 나은 것을 의미하지 않습니다.

    당신은 다음과 같은 구조를 사용하여 if 문을 삭제할 수 있습니다하지만 necessarely 더 나은 것을 의미하지 않습니다.

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

    4.ISNULL 시도

    ISNULL 시도

    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
    
  5. ==============================

    5.나는 당신이 어떤이 반환됩니다 있는지 확인하기 위해 @@ ROWCOUNT를 사용할 수도있을 것 같군요.

    나는 당신이 어떤이 반환됩니다 있는지 확인하기 위해 @@ 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
    
  6. ==============================

    6.내가 할 수있는 가장 좋은 방법은 첫 번째 선언 @name 것을 제안했다. 그런 다음이 값을 설정 사용자 ID를 기반으로 @name가 null 쇼의 기본 이름은 다른 이름을 표시하는 경우 다음 ... 그 방법은 다른 방법으로 효율적으로 될 것이며 가지고 생각하는 다른 사용자가 더 readable.for 다른 방법이 될 것입니다 많은 좋은 의견이없는 한에서 무슨 일이 일어나고 있는지 알 수 있습니다.

    내가 할 수있는 가장 좋은 방법은 첫 번째 선언 @name 것을 제안했다. 그런 다음이 값을 설정 사용자 ID를 기반으로 @name가 null 쇼의 기본 이름은 다른 이름을 표시하는 경우 다음 ... 그 방법은 다른 방법으로 효율적으로 될 것이며 가지고 생각하는 다른 사용자가 더 readable.for 다른 방법이 될 것입니다 많은 좋은 의견이없는 한에서 무슨 일이 일어나고 있는지 알 수 있습니다.

    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') 
    
  7. ==============================

    7.

    Try this 
    `SELECT IFNULL(Name,'John Doe') FROM Users WHERE Id = @UserId)`
    
  8. from https://stackoverflow.com/questions/11503463/how-to-return-default-value-from-sql-query by cc-by-sa and MIT license