[SQL] SQL 쿼리에서 기본 값을 반환하는 방법
SQLSQL 쿼리에서 기본 값을 반환하는 방법
쿼리가 어떤 행을 반환하지 않는 경우 단일 스칼라 또는 기본 값을 반환 할 수있는 쉬운 방법이 있습니까?
이 순간에 나는이 코드 예제 같은 것을 가지고 :
IF (EXISTS (SELECT * FROM Users WHERE Id = @UserId))
SELECT Name FROM Users WHERE Id = @UserId
ELSE
--default value
SELECT 'John Doe'
어떻게 IF-ELSE 사용하지 않고 더 나은 방법으로 그렇게합니까?
해결법
-
==============================
1.이름을 가정하면 Null을 허용하지 않고 ID가 가장 하나의 행에 일치 할 수 있도록 고유한지.
이름을 가정하면 Null을 허용하지 않고 ID가 가장 하나의 행에 일치 할 수 있도록 고유한지.
SELECT ISNULL(MAX(Name),'John Doe') FROM Users WHERE Id = @UserId
-
==============================
2.ISNULL 또는 유착을보십시오 :
ISNULL 또는 유착을보십시오 :
SELECT ISNULL((SELECT TOP 1 Name FROM Users WHERE Id = @UserId), 'John Doe')
이 ID를 가진 사용자의 존재가의 ISNULL이 사건을 해결하지 않을 경우 내부 SELECT는 아무 것도 반환하지 않습니다.
-
==============================
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.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.나는 당신이 어떤이 반환됩니다 있는지 확인하기 위해 @@ 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.내가 할 수있는 가장 좋은 방법은 첫 번째 선언 @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.
Try this `SELECT IFNULL(Name,'John Doe') FROM Users WHERE Id = @UserId)`
from https://stackoverflow.com/questions/11503463/how-to-return-default-value-from-sql-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 명시 적 및 암시 조인 혼합은 "이 테이블에 대한 항목은 ...하지만이 쿼리의이 부분에서 참조 할 수 없습니다"와 함께 실패 (0) | 2020.06.30 |
---|---|
[SQL] "LIKE"과의 차이점은 SQL에서 "="는 무엇인가요? (0) | 2020.06.30 |
[SQL] 어떻게 열 이름 SqlDataReader.GetValue하여 데이터를 얻을 수 있습니다 (0) | 2020.06.30 |
[SQL] "이 SqlTransaction이 완료되었습니다; 더 이상 사용할 수 없습니다. "... 구성 오류? (0) | 2020.06.30 |
[SQL] PostgreSQL의 열 'foo는'존재하지 않는 (0) | 2020.06.30 |