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
'programing' 카테고리의 다른 글
SQL 로더 오류: "변수 길이 필드가 최대 길이를 초과합니다." (0) | 2023.11.04 |
---|---|
{"readyState":4", status":200", statusText":"성공"}을(를) 사용한 오류 콜백 (0) | 2023.11.04 |
jQuery를 사용하여 JavaScript 개체에서 항목 추가/제거 (0) | 2023.11.04 |
매 n번째 줄 팬더 (0) | 2023.11.04 |
C 프로그래머의 관점에서 ARM 아키텍처 간의 차이? (0) | 2023.11.04 |