2014-11-12 2 views
0

그래서이 question을보고 있었고 Coalesce가 대답에 올바르게 사용되는지 파악하려고합니다.통합 사용 혼란

INSERT INTO users (user_id, name) 
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob'; 

이 질문을하는 것이 잘못된 방법이지만 그 5 년 된 게시물에 대한 의견을 제시 할 수있는 충분한 담당자가 없으면 사과드립니다. 이 혼란은 Coalesce의 사용에서 출발합니다. Coalesce는 두 개 이상의 열을 비교하여 이해가 정확하다면 첫 번째 NON Null 값을 가져옵니다.

이 사용자의 문제였다 값이 존재하지 않는 경우는 그래서 오전 1

에서 시작하는 데 필요한 있기 때문에, '밥', 그의 USER_ID 필드는 그가 원하지 않았다, 0 인서트 것 나는 대답에서 그가 두 번째 논쟁에 대해 0을 단순하게 두었다는 점을 고려할 때 여기에서 필요하지 않다고 생각하는 것으로 정확하게 합쳐진다. 이 예제에서 Coalesce는 아무런 결과도 얻지 못했고 실제로 작업 말은 'Select 1 + Select max()'입니다.

다시 한 번 나는 이것이 내가 겪고있는 문제에 대한 모범으로 보았 기 때문에 합체의 개념을 이해하려고 노력하고있다.

답변

1

쿼리 : 더 '밥'이 없었다 경우

SELECT max(user_id) FROM users WHERE name='Bob' 

NULL을 반환합니다. 그래서 COALESCE()

는이 경우 0 대신 NULL를 반환 한 다음이 아닌 경우는 '밥', 또는 1가 있다면 다음을 얻을 수 1을 추가하는 데 사용됩니다.

정확도는 COALESCE()이며 값 목록에서 첫 번째가 아닌 값을 사용합니다.

+0

그렇다면 Coalesce (x, 0)는 0을 비교 값으로 사용합니다. 이 상황에서 병합 대신에 IFNULL()을 사용하는 것이 프로 또는 죄수입니까? Coalesce가 나에게 오용되고있는 것처럼 보이지만 나는 당신의 설명으로 지금 어떻게 작동 하는지를 이해합니다. – NitroFrost

+1

'COALESCE()'는 모든 주요 데이터베이스에 있지만'IFNULL()'은'ISNULL()'을 대신 사용합니다. 성능도 달라야합니다. –