결과가 없더라도 값 반환
특정 ID에 대해 null이 아닌 정수 필드를 반환하는 다음과 같은 단순한 쿼리가 있습니다.
SELECT field1 FROM table WHERE id = 123 LIMIT 1;
문제는 ID가 발견되지 않으면 결과 세트가 비어 있다는 것입니다.결과가 없더라도 항상 값을 반환하기 위한 쿼리가 필요합니다.
동작하고 있는 것은 있습니다만, 같은 서브 쿼리의 2배가 되기 때문에 마음에 들지 않습니다.
SELECT IF(EXISTS(SELECT 1 FROM table WHERE id = 123) = 1, (SELECT field1 FROM table WHERE id = 123 LIMIT 1), 0);
행이 존재하는 경우 어느 하나의 필드 1을 반환하고, 그렇지 않은 경우 0을 반환합니다.그것을 개선할 방법이 있나요?
감사합니다!
몇 가지 코멘트와 답변을 따라 편집합니다.예, 단일 쿼리 문으로 해야 하며 값을 1개만 반환해야 하므로 카운트 트릭을 사용할 수 없습니다(참고로 Java/Spring 메서드 SimpleJdbcTemplate로 쿼리를 실행합니다.query For Long()).
MySQL에는 결과가 null일 경우 값을 반환하는 함수가 있습니다.전체 쿼리에서 사용할 수 있습니다.
SELECT IFNULL( (SELECT field1 FROM table WHERE id = 123 LIMIT 1) ,'not found');
1개의 레코드(LIMIT 1)를 찾고 있기 때문에, 이것은 동작합니다.
(SELECT field1 FROM table WHERE id = 123)
UNION
(SELECT 'default_value_if_no_record')
LIMIT 1;
기본값을 표시하거나 결과를 찾을 수 없음을 나타내는 편리한 방법이 될 수 있습니다.보고서 작성에 사용합니다.
이것을 사용해 리포트에 헤더를 작성하는 방법에 대해서는, http://blogs.uoregon.edu/developments/2011/03/31/add-a-header-row-to-mysql-query-results/ 도 참조해 주세요.
count(id)를 포함할 수 있습니다.그것은 항상 돌아온다.
select count(field1), field1 from table where id = 123 limit 1;
http://sqlfiddle.com/ #!2/64c76/4
COALESCE를 사용할 수 있습니다.
SELECT COALESCE(SUM(column),0)
FROM table
이를 사용하여 변수에 결과를 삽입한 후 저장 프로시저에서 사용하려는 경우 다음과 같이 수행할 수 있습니다.
DECLARE date_created INT DEFAULT 1;
SELECT IFNULL((SELECT date FROM monthly_comission WHERE date = date_new_month LIMIT 1), 0)
INTO date_created
WHERE IFNULL((SELECT date FROM monthly_comission WHERE date = date_new_month LIMIT 1), 0) = 0;
이를 통해 'date_created' 1 또는 0 변수에 저장합니다(아무것도 반환되지 않은 경우).
검색 방법LEFT OUTER JOINMySQL이 인라인을 허용하는지 알 수 없습니다.VALUES이 목적을 위해 미리 정의된 테이블을 가질 수 있습니다.
k-a-f의 답은 하나의 열을 선택하는 데 적용되며, 여러 열을 선택하는 경우 가능합니다.
DECLARE a BIGINT DEFAULT 1;
DECLARE b BIGINT DEFAULT "name";
SELECT id, name from table into a,b;
그럼 a, b의 값을 확인하면 되겠네요
항상 반환값을 반환하지만 늘 값은 반환하지 않는 경우 카운트와 병합을 조합할 수 있습니다.
select count(field1), coalesce(field1,'any_other_default_value') from table;
그 이유는 카운트가 항상 mysql이 값을 반환하도록 강제하고(카운트할 값이 없는 경우 0), mysql이 항상 null이 아닌 값을 강제합니다.
언급URL : https://stackoverflow.com/questions/12449899/returning-a-value-even-if-no-result
'source' 카테고리의 다른 글
| Java 어레이의 프리미티브는 스택 또는 힙에 저장되어 있습니까? (0) | 2022.11.02 |
|---|---|
| URL과 일치시키는 데 적합한 정규 표현은 무엇입니까? (0) | 2022.11.02 |
| Java String의 Unicode 코드 포인트를 반복하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
| 중복된 Java 런타임 옵션: 기본 설정 순서는 무엇입니까? (0) | 2022.11.02 |
| MySQL 테이블에 여러 행을 삽입하고 새 ID를 반환하려면 어떻게 해야 합니까? (0) | 2022.11.02 |