2014-06-20 2 views
3

이것은 내 시나리오입니다. 회원이 모바일에 테이블 하나를 가지고 있는지 확인하고 싶다면 예를 들어 휴대 전화를 표시하고 다른 사람에게는 유선 전화가 있는지 확인하고 싶습니다. 다른 테이블에서 ... 그렇다면 유선을 표시합니다. 우리는 두 개의 서로 다른 필드두 개의 다른 필드의 두 조건이있는 사례 명세서

SELECT a.name as name, b.name as parent_name, a.mobile, b.phone, 
case 
    when a.mobile is not null or a.mobile<>'' then a.mobile 
else b.phone 
end 
    as phone 
FROM family_member a join family_header b where a.name='sam' and a.id=b.match_key; 

을 비교하는 경우 문을 사용할 수 있는지 확실하지 나를 인도 해주십시오 .. 첫 번째 경우 문이 실행되고 a.mobile이 가능한 경우 표시 ..되지만 모바일을 사용할 수없는 경우, 고정 전화 번호는 표시되지 않습니다.

+0

어느 데이터베이스입니까? – GolezTrol

+0

** SQL **은 단지 쿼리 언어 일 뿐이지 만, 그렇다고하더라도 구체적인 데이터베이스는 미묘한 차이가있는 경향이 있습니다. 따라서 ** 구체적인 데이터베이스 시스템 **이 무엇인지 알아 내면 도움이 될 것입니다. mysql','oracle','postgresql','db2','sql-server' 또는 다른 것을 사용하고 있습니다 ** ** 귀하의 태그를 업데이트하십시오 ** ** 따라서 –

+0

데이터베이스는 mysql –

답변

1

not null 인 경우 not null이므로이 조건은 a.mobile이 빈 문자열 인 모든 레코드와 일치합니다. 내 생각에 비어있는 필드는 null입니다.

변경에 대한 조건 :

when a.mobile is not null AND a.mobile<>'' then 
어쩌면

더 나은은 : 항상 전화 번호 또는 빈 문자열을 포함, 그래서 필드에 널 (NULL) 입력이 불가능합니다. 내가 유착을 추천 할 것입니다

when a.mobile<>'' then 
+0

입니다 .. 문제는 OR AND 조건이 엉망이되어 .. 미안하지만 고마워 .. 지금 작동 .. –

0
SELECT a.name as name, b.name as parent_name, a.mobile, b.phone, 
case 
    when a.mobile is not null or a.mobile<>'' then a.mobile 
else (CASE 
      when b.phone is not NULL or b.phone<>'' then b.phone 
      else '') 
end 
    as phone 
FROM family_member a join family_header b where a.name='sam' and a.id=b.match_key; 
0

: 그런 다음에 조건을 단순화 할 수 있습니다.

COALESCE(a.mobile, b.phone, '') 
+0

덕분에, 나는 합체 기능을 잊어 버렸다. .. 고마워! –

+3

이 경우에는 a.mobile이 ''COALESCE가 반환 할 것입니다 '' – TMNT2014

0

CASEWHEN 그렇지 않으면 전화 번호가 빈 문자열 또는 null이 될 수 있다면 당신은 CASE를 사용하는 것이 좋습니다

SELECT a.name as name, b.name as parent_name, a.mobile, b.phone 
    , CASE WHEN a.mobile is NOT NULL OR a.mobile<>'' THEN a.mobile 
      WHEN b.phone is NOT NULL OR b.phone<>'' THEN b.phone 
      ELSE '' 
     END AS phone 
FROM family_member a 
     JOIN family_header b 
WHERE a.name='sam' 
    AND a.id=b.match_key; 
+0

이 작업이 작동하지 않습니다 ... a.mobile의 모든 값이 표시되지 않고 b.phone에 값이 있다고 생각되면 b.phone isnt 표시 : ( –

+0

@ SamuelMathews 가짜 데이터로 [SQLFiddle] (http://www.sqlfiddle.com/#!2/906b4/1)을 만들었고 제대로 작동하는지 확인해 주시겠습니까? – Serpiton

0

무료 전에 열이있는 경우에만 컬럼에 바인딩 성명서. 둘째로 CASEOR 대신 AND을 사용해야한다고 생각합니다. 또한 테이블을 올바르게 작성하지 않았습니다.

SELECT a.name as name, b.name as parent_name, 
    CASE WHEN a.mobile is NOT NULL AND a.mobile <> '' THEN a.mobile 
     WHEN b.phone is NOT NULL AND b.phone <> '' THEN b.phone 
     ELSE '' END AS Phone 
FROM family_member a 
INNER JOIN family_header b ON a.id = b.match_key 
WHERE a.name = 'sam' 
관련 문제