데이터베이스 행에 부분 데이터를 일치시키려는 함수가 있습니다. 매개 변수가 null이 아닌 경우 일치 항목을 찾고 싶습니다. null 인 경우는 그 파라미터를 무시할 필요가있다. 매개 변수 중 하나에 값이 있지만 일치하는 것이 없으면 쿼리는 행을 반환하지 않습니다. 의사에서지정된 경우 함수 매개 변수의 필터를 사용하여 선택
, 즉이 가고 싶어하는 방법을 꽤 많이있다 :
get all rows where:
param_a matches col_a when param_b is not null else don't check this column
AND param_b matches col_b when param_b is not null else don't check this column
AND param_c matches col_c when param_c is not null else don't check this column
AND param_d matches col_d when param_d is not null else don't check this column
AND param_e matches col_e when param_e is not null else don't check this column
내가 지금 당장 :
SELECT * FROM table
WHERE nvl(param_a, col_a) = col_a
AND nvl(param_b, col_b) = col_b
AND nvl(param_c, col_c) = col_c
AND nvl(param_d, col_d) = col_d;
기타 ... 그것은 작동하지만, 나는 그것이 확실하지 않다 최선의 선택. 동료는이 웹 응용 프로그램에서 자동 완성 기능에 사용되기 때문에 내가
SELECT * FROM table
WHERE (param_a = col_a or param_a is null)
AND (param_b = col_b or param_b is null)
AND (param_c = col_c or param_c is null)
AND (param_d = col_d or param_d is null);
를 사용하는 쿼리는 사용자 유형으로, 많이 실행 제안했다. 빠른 것은 필수적입니다. 가장 엄격한 열을 먼저 필터링하여 처리 할 행 수를 줄입니다.
이러한 옵션 중 어느 것이 좋습니까? 그렇지 않다면 어떻게 할 것입니까?
편집 : 나는 일반적인 질문이지만 문맥에 넣어야한다 :이 경우는 주소이다. param_a
은 실제로 우편 번호입니다. param_b
거리 이름 등 ...이 함수는 사용자가 쓰는 문자열 (예 : 999 Random St, Fakestate, Countryland, 131ABD)을 가져 와서 분할하려고하는 프로 시저를 호출하고 다음을 포함하는 테이블을 반환합니다. 주소, 도시, 국가 등 ... select 문 (질문의 주제)에 사용됩니다.