2016-06-09 10 views
3

null 인 반환 된 모든 값, 즉 MySql에 기본값을 설정하는 방법이 있습니까?SELECT * 문에서 SQL IFNULL

대신

SELECT 
    IFNULL(foo, 0), 
    IFNULL(bar, 0), 
    IFNULL(baz, 0) 
FROM table 

의 내가 좋아하는 일을하고 싶습니다 :

SELECT IFNULL(*, 0) 
FROM table 

// this does not work, but I'm looking for something like it 
+2

없음 , SQL에서이 작업을 수행 할 방법이 없습니다. –

+0

의견을 보내 주셔서 감사 드리며이 게시물에 나오는 다른 사람에게 IFNULL을 각 항목에 추가 할 수없는 이유는 ORM 스타일로 SQL을 동적으로 생성한다는 사실 때문입니다. (예 : 일 테이블)에 대해 LEFT JOIN을 수행하고 동적 테이블에서 select *를 수행하십시오. – sabrams

답변

2

SQL에서 함수의 결과는 단일 값 (열)이 아닌 컬럼의 목록입니다. 따라서 그러한 구조가 존재하지도, 존재할 수도 없습니다. 불행히도 모든 열을 개별적으로 처리해야합니다. 당신은 상관하지 않는 경우

+1

내가 원하는 답변은 아니지만 확실하게 알아두면 좋습니다. – sabrams

0

당신은 NULL을 보존에 대해 테이블에 기본 값을 추가 할 수 있습니다

ALTER TABLE yourTable ALTER foo SET DEFAULT 0; 

당신은 또한 당신이 한 번 IFNULL() 각 문을 쓰는 경우 뷰를 만들고 단지에 그것을 사용할 수 있습니다 항상 다시 입력하지 않아도됩니다.

그러나 다른 사람이 지적한대로, 당신이 바라는 것처럼 단순히 그것을 할 수있는 구조는 없습니다.

당신 신속도를 사용하여이를 수행 할 수 테이블 메타 데이터와 같은 반복적 인 일 : 당신은 다른 컬럼에 대한 다음

select 
CASE 
    WHEN foo is null THEN 0 else foo end 

    from urtable 

과 같은 다음과 같이 SQL의 경우 문을 시도 할 수 있습니다

SELECT CONCAT("IFNULL(",`COLUMN_NAME`,",0)") 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA`='yourdatabasename' 
    AND `TABLE_NAME`='yourtablename'; 
+0

불행히도 내 select의 값 중 많은 부분이 계산 된 값이며, 테이블에서 null을 원하지만 보고서가 생성되지 않는 일부 테이블이 있습니다. – sabrams

-1