부울 논리 언어를 SQL WHERE 절로 변환하는 부울 논리 구문 분석기를 작성해야합니다.부울 논리는 어떻게 파싱합니까?
피연산자의 순서는 항상 올바른 순서 (값은 오른쪽에 있음)입니다.
다음은 비교적 간단한 예입니다. 중첩 된 괄호와 NOT 연산자 등을 사용할 수 있습니다.
(CACOUNT=01 OR CACOUNT=02 OR CACOUNT=03)
AND Q4=1 AND NAME=TIMOTHY
다음은 WHERE 절이 유사 할 것입니다.
WHERE (
EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='01'
)
OR EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='02'
)
OR EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='CACOUNT' AND b.Value='03'
)
)
AND EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='Q4' AND b.Value='1'
)
AND EXISTS (
SELECT 1 FROM MyVerticalTable b
WHERE b.Key=a.Key AND b.Key='NAME' AND b.Value='TIMOTHY'
)
으로 바꿉니다. 그대로 'where' 절을 그대로 사용할 수 없습니까? – tzaman
아니, 정말로 전혀 할 수 없다. CACOUNT라는 열이 없습니다. 그것은 수직 테이블입니다. –
세로 테이블이란 무엇입니까? – Andrey