2014-05-21 1 views
0

수동 입력의 데이터가있는 테이블이 있습니다. 사용자가 시스템에 "규칙"을 작성하고 이름을 선택하면 항상 이와 같이 저장됩니다. 그래서 두 가지 규칙은 똑같은 것을 의미 할 수도 있고 똑같을 수도 있지만 약간 다른 이름을가집니다. 예 :일치하는 문자열이지만 다른 순서로 테이블에서 특정 이름/제목을 찾습니다.

규칙 1 : 규칙 2

미국, 유럽 연합 (EU)과 JP

에서 판매 자동차 : EU, 일본 및 미국

에서 판매 자동차

규칙 3 : 자동차 유럽 연합 (EU), 미국, 일본에서 판매 , MX 및 GE

내가해야할 일은 이러한 수천 가지 규칙 내에서 특정 패턴을 찾는 것입니다. 이렇게 : 미국, EU 및 JP에서 판매 된 자동차를 찾으십시오.

이제 결과에는 규칙 1과 규칙 2가 표시되어야합니다. 둘 다 서로 다른 순서로 이름에 동일한 정보를 포함합니다. 규칙 3에는이 정보도 포함되어 있지만 MX 및 GE와 같은 다른 국가도 포함되므로 고려하지 않아야합니다.

지금까지 규칙 1과 규칙 2를 찾았지만 규칙 3을 찾은 SQL이 있습니다. 그리고 그 기계에서 자신의 이름에 문자열을 포함하는 다른 규칙을 원하지 않는다는 것을 어떻게 알 수 있는지를 알 수 없습니다 다른 정보도 있습니다.

select RULE_NUM, RULE_NAME from TB_RULE 
where RULE_NAME like '% Cars sold in%' 
and RULE_NAME like '%US%' 
and RULE_NAME like '%EU%' 
and RULE_NAME like '%JP%' 

고마워요. 고맙습니다 !!

+0

실제 테이블에 규칙을 정의/입력하는 방법을 추가 할 수 있습니까? – cjb110

+0

IN 절에 고유 한 국가 코드 목록을 작성해야하지만 규칙 구조를 보지 않고서는 알기가 어렵다고 생각합니다. 원칙적으로 순서가 다른 규칙을 만드는 것을 방지하는 응용 프로그램 논리를 사용하는 것이 가장 이상적이지만 다른 문제입니다. –

+0

어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

답변

0

나는 그렇지 않으면 절 그냥 거 좋아하는 브라켓 :

의 거대한 세트로되는 경우, 당신은 첫 번째 단계로, 플래그의 집합으로 Rule_Name을 변환해야합니다 생각
select Rule_Name 
    , CarsSoldFlag = case when Rule_Name like '%Cars sold in%' then 1 else 0 end 
    , InUSFlag = case when Rule_Name like %US% then 1 else 0 end 
    , InJPFlag = case when Rule_Name like %JP% then 1 else 0 end 
    ...etc 

규칙을 구성 요소 비트로 분해 한 후에는 쿼리가 더 쉬워야합니다.

+0

주셔서 감사합니다. 그러나 나는 거기에서 깃발을 가지고 갈 것 인가? 관련 플래그 = 1을 확인해야 할 것 같습니까? – user3659470

+0

where 절에서 어떻게 이러한 플래그를 사용할 수 있습니까? InUSFlag = 0을 입력하면 오류가 발생합니다 .... 감사합니다 :) – user3659470

관련 문제