최근에 잘못된 결과가 나올 때까지는 아무런 문제없이 몇 년 동안 PeopleSoft 보고서를 실행했습니다. 문제를 해결하기 위해 WHERE 절 매개 변수를 그룹화해야했습니다. 아래의 스크린 샷을 살펴보십시오. Query Window ScreenshotTSQL 결과 오류
쿼리가 매개 변수를 고려해도 데이터를 검색해서는 안됩니다. 상단의 쿼리는 수정 된 쿼리이고 하단의 쿼리는 오류없이 5 년 이상 보고서를 실행 한 것입니다. 이제는 비즈니스 이해 관계자에게 왜 그렇게 행동하는지 설명해야합니다. 이견있는 사람?
-- THIS QUERY EXECUTES FINE AND DISPLAYS EXPECTED RESULT (TOP PANE)
SELECT PRODUCT, HM_RETIRE_FLAG, RETIREMENT_DT
FROM FSPROD..PS_HM_PRODUCT_AM
WHERE PRODUCT = '7U3'
AND (HM_RETIRE_FLAG = 'Y' OR (HM_RETIRE_FLAG = 'Y' AND RETIREMENT_DT > getdate()))
-- THIS QUERY DISPLAYS A COMPLETELY DIFFERENT RESULT (BOTTOM PANE)
SELECT PRODUCT, HM_RETIRE_FLAG, RETIREMENT_DT
FROM FSPROD..PS_HM_PRODUCT_AM
WHERE PRODUCT = '7U3'
AND HM_RETIRE_FLAG = 'Y' OR (HM_RETIRE_FLAG = 'Y' AND RETIREMENT_DT > getdate())
에서 그것을 지적하는 노력을 만들었을 것 대신에 스크린 샷의 텍스트로 쿼리를 게시합니다. –
[precedence opertors] (https://msdn.microsoft.com/en-us/library/ms190276.aspx)에 대해 읽으십시오. 두 SQL 쿼리의 조건이 같지 않습니다. – danihp
어쨌든 첫 번째 것은 잘못되었습니다. 'x = y 또는 (x = y 및 z = 1)'은 'where x = y'와 동일하기 때문에 – LukStorms