2008-09-16 1 views
2

나는 내가 아니라 정확하게 일치가없는 경우 먼저 사용에 필요하다는 것을 발견하고 있습니다 그러나 현재SQL 쿼리 - 사용 정확히 일치하는 항목이없는 경우에만 사용?

LEFT JOIN weblog_data AS pwd 
    ON (pwd.field_id_41 != '' 
    AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%')) 

을 사용하는 쿼리에 문제가 있어요. 결과는 LIKE의 사용으로 인해 쿼리가 이중 딥핑 (double dipping)되므로 정확한 일치를 먼저 테스트하면 이중 딥핑 문제가 발생하지 않습니다. 누구든지 나에게 추가 지침을 제공 할 수 있습니까?

답변

1

정확히 일치하는 부분을 기반으로 스니 j에서 pwd 및 ewd로 별명이 지정된 테이블을 조인하려는 것처럼 들리지만, 실패한 경우에는 지금 비교해보십시오. 당신이 PWD에 null이 될 수있는 필드를 처리하는 경우,

select 
    isnull(pwd1.field, pwd2.field) 

그러나 그이 같은 것을 사용, 당신의 선택 절에, 그리고

LEFT JOIN weblog_data AS pwd1 ON (pwd.field_id_41 != '' AND pwd.field_id_41 = ewd.field_id_32) 
LEFT JOIN weblog_data AS pwd2 ON (pwd.field_id_41 != '' AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%')) 

을 :

이 시도 문제가 발생할 것입니다. 그래도 작동됩니다.

select 
    case pwd1.nonnullfield is null then pwd2.field else pwd1.field end 

또한 다음과 같이 그룹을 수행해야합니다. pwd2에 조인하면 결과 세트에 행이 추가됩니다 (결과가 무시 될지라도).

1

당신은 단락 회로 평가에 대해 이야기하고 있습니다. 그렇지 않으면 실행하지 않는, 등을 실행, 그렇다면, 행 == 0의 납입을 확인, TSQL을 사용하여 http://beingmarkcohen.com/?p=62

+0

나는 이것이 내가 무엇을 찾고 있는지 어떻게 성취하는지 이해하지 못한다. 예제에서는 무의미한 쿼리에 여분의 사이클을 피하기에 충분히 똑똑한 SQL 인 것처럼 보입니다. 이것은 A 또는 B와 A가 참일 경우처럼 보입니다. A가 실패 할 경우 A가 실패하면 B를하십시오. –

+0

죄송합니다. 몇 번 질문을 다시 읽었으며 마침내 "Like"를 Exact Match로 바꾸고 싶습니다. – Sam

1

이 정확히 일치를 실행

당신을 도움이 될이 문서에서보세요 같은 또는 정확한 일치 아래에 같은 결과를 추가하십시오.

0

코드로만 생각할 수 있습니다. 정확히 일치하는 것을 찾으십시오. 결과가 비어 있으면 LIKE를 찾으십시오. 다른 하나의 옵션은이 쿼리에서 WHERE (정확한 일치에서의 카운트 = 0)와 같은 WHERE입니다.이 경우 정확하게 일치하는 결과가 0 개를 초과하면 LIKE와 비교를 진행하지 않습니다. 하지만 매우 비효율적입니다 ... 코드에서 의미있게 사용하는 것은 어렵습니다.

나는 (정확한 일치 = 0에서 계산) 다음 쿼리를 좋아하고, 그렇지 않으면 정확히 일치하는 결과를 사용합니다.