2011-10-03 2 views
1
Select Header1,Header2,Header3,ExtraHeader from tbl_likeinfo where HotelID=2 

여기서 Header3 및 ExtraHeader에는 null 값이있을 수 있습니다.이 경우 쿼리 결과에는 null 값만 필요하지만 다른 열 값을 포함하는 행을 지정해야합니다.mysql에서 select 쿼리에 null 값을 갖는 열을 생략하는 방법은 무엇입니까?

어떻게 달성할까요?

+0

결과에 열을 나타내지 않겠습니까? 아니면 해당 열에 null 값을 포함하는 행을 의미하지 않습니까? –

+0

5 열 사이에 2 열이 null 인 경우 해당 행에 대해서만 3 열의 값만 표시해야합니다. – Heena

+0

다음은 말하여 다음과 같이 지정합니다. Header1이 null이 아니고 Header2가 null이 아닌 AND ... 열을 추가 할 때 계속 쿼리를 업데이트해야하기 때문에 이상적입니다.이 경우에는 필자가 내 대답에서 제안한 것이 더 나은 솔루션이라고 생각합니다. –

답변

2

쿼리가 선택하는 데이터를 기반으로 결과 집합에서 선택한 열을 동적으로 변경할 수 없습니다. 널 (null)을 처리하지 않으려는 경우 헤더 값에 CASE 문을 사용하여 동일한 값을 처리 할 수 ​​있음을 나타내는 값으로 변경할 수 있지만이 방법은 권장하지 않습니다.

접근 방식을 변경하고 싶을 수 있습니다. 각 고유 헤더를 나타내는 열을 사용하는 테이블 레이아웃이있는 것으로 보입니다. 당신이 당신의 레이아웃을 변경 한 경우 표했다 그래서 : 당신이 헤더를 삽입 할 때

hotel_id  NUMBER 
header_name VARCHAR2(50) 
header_value VARCHAR2(100) 

그런 다음, 그 시간에받은 헤더 당 하나 개의 삽입을한다. 그런 다음 변경 당신의 선택에 :

SELECT header_name, header_value FROM headers WHERE hotel_id = 2; 

당신이 널 (null)이었고, 당신이 그들을 뽑아 때, 당신은 다음, 그들을 제거 할 헤더 값 저장 될 일 경우 : 순서가 중요

SELECT header_name, header_value 
FROM headers 
WHERE hotel_id = 2 AND header_value is not null; 

경우를 그 다음 주문을 저장하기 위해 표에 열을 추가합니다. 이 레이아웃을 사용하면 장래에 테이블 레이아웃을 변경하지 않고도 모든 헤더 정보를 저장할 수 있습니다.

희망이 도움이됩니다.

+0

여기에 header1, header2, .. 자체 값을 가지고 – Heena

0
AND Header3 IS NOT NULL AND ExtraHeader IS NOT NULL 
+0

중 하나에 내 테이블에 10 개의 헤더와 1 개의 추가 헤더가 있습니다.이 경우에는 '할 필요가 있습니까?'및 10 회 동안? – Heena

+0

저는 SQL 전문가가 아니지만 AFAIK입니다. – m0skit0

+0

@Heena,'coalesce (col1, col2, col3, ...)를 사용하여 단축 할 수 있습니다., col10)은 NULL입니다. 그러나 MySQL이 인덱스를 사용하지 못하도록하고 부울 단락을 방지하므로 느리게 실행될 수 있습니다. – Johan

관련 문제