2017-12-07 15 views
0

사용자가 4 가지 유형의 값을 선택하고 UI에 관련 데이터가 표시되는 백 엔드에 하이브 데브가있는 웹 응용 프로그램이 있습니다. 여러 개의 하이브 쿼리 where AND 절 AND 연결 논리적 연결

예 필드가있을 수 있습니다 :

  • 프로젝트 ID는
  • 하위 포트폴리오는
  • 이 프로젝트의 상태
  • 프로젝트 파이낸스 상태

사용자가 언급 한 필드에 다른 값을 선택할 수 있습니다 (단일 또는 다중) 및 데이터 요청.

하나의 하이브 쿼리에 여러 개의 IN 절이 있고 AND 논리 연산자와 결합되어 데이터를 생성합니다.

사용자가 각 입력란에 적어도 하나의 값을 선택할 때까지는 모든 것이 좋습니다. 그러나 사용자가 3 개의 필드에 대한 필터를 선택하고 공백으로 남겨두면 ''은 조건과 데이터가 표시되지 않는 IN 절로 전달됩니다. 조건과 일치하는 행이 없기 때문입니다.

필드가 선택되지 않은 것처럼 해당 필드의 모든 데이터를 가져 오거나 해당 필드의 IN 절을 제거하려면 IN 절에 무언가를 전달해야합니다.

쿼리를 만들기 전에 값을 선택하면 매번 확인해야하는 경우가 많습니다.

어디에서나 IN이 여러 개인 단일 쿼리를 제안하고 일부 매개 변수를 전달하여 값이 선택되지 않은 필드의 모든 행을 가져올 수있는 경우.

참고 : 하이브 JDBC 쿼리를 사용하고 있습니다. 당신이 값을 전달하는 방법에 따라 = '' 수 있습니다 물론 in null

where ($subporfolio is null or subportfolio = $subportfolio) and 
     ($status is null or status = $status) and 
     . . . 

:

+1

그 자체로 질문은 너무 광범위합니다. 일부 샘플 데이터와 예상 결과 및 시도를 표시하려고합니다. –

답변

0

당신은 같은 구조로이 문제를 처리 할 수 ​​있습니다.

+0

고든에게 고마워요. 네가 괜찮다면 하이브에서 구조를 사용하는 방법을 이해하도록 도와주세요. 예제가있을 수 있습니다. – techprat

0

더 나은 동적 쿼리를 만드는 중입니다. 모든 입력 매개 변수를 반복하고 해당 값이 null이거나 비어 있지 않은지 확인한 다음 쿼리의 IN 절에 추가됩니다.